diff --git a/CMakeLists.txt b/CMakeLists.txt index 07e462e59d..4a9173ed37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -884,7 +884,7 @@ add_library(cityhash STATIC ext/cityhash/city.h ext/cityhash/citycrc.h ) -include_directories(ext/cityhash) +target_include_directories(cityhash PRIVATE ext/cityhash) if(NOT MSVC) # These can be fast even for debug. @@ -1360,7 +1360,7 @@ add_library(kirk STATIC ext/libkirk/kirk_engine.c ext/libkirk/kirk_engine.h ) -include_directories(ext/libkirk) +target_include_directories(kirk PRIVATE ext/libkirk) add_library(sfmt19937 STATIC ext/sfmt19937/SFMT.c @@ -1369,19 +1369,20 @@ add_library(sfmt19937 STATIC ext/sfmt19937/SFMT-params.h ext/sfmt19937/SFMT-params19937.h ) -include_directories(ext/sfmt19937) +target_compile_definitions(sfmt19937 PRIVATE SFMT_MEXP=19937) +target_include_directories(sfmt19937 PRIVATE ext/sfmt19937) add_library(xbrz STATIC ext/xbrz/xbrz.cpp ext/xbrz/xbrz.h ) -include_directories(ext/xbrz) +target_include_directories(xbrz PRIVATE ext/xbrz) add_library(xxhash STATIC ext/xxhash.c ext/xxhash.h ) -include_directories(ext/xxhash) +target_include_directories(xxhash PRIVATE ext/xxhash) set(CoreExtra) set(CoreExtraLibs) @@ -2067,6 +2068,7 @@ if(USE_SYSTEM_ZSTD) target_link_libraries(${CoreLibName} ${ZSTD_LIBRARY}) else() set(ZSTD_BUILD_PROGRAMS OFF CACHE BOOL "we don't need zstd programs" FORCE) + set(ZSTD_LEGACY_SUPPORT OFF CACHE BOOL "we don't use any old zstd files" FORCE) add_subdirectory(ext/zstd/build/cmake EXCLUDE_FROM_ALL) set(CoreExtraLibs ${CoreExtraLibs} libzstd_static) include_directories(ext/zstd/lib) diff --git a/Common/Data/Color/RGBAUtil.h b/Common/Data/Color/RGBAUtil.h index 9e8128bae1..3ea03f328a 100644 --- a/Common/Data/Color/RGBAUtil.h +++ b/Common/Data/Color/RGBAUtil.h @@ -16,3 +16,9 @@ typedef unsigned int Color; inline Color darkenColor(Color color) { return (color & 0xFF000000) | ((color >> 1) & 0x7F7F7F); } + +inline Color lightenColor(Color color) { + color = ~color; + color = (color & 0xFF000000) | ((color >> 1) & 0x7F7F7F); + return ~color; +} diff --git a/Common/Data/Convert/ColorConv.h b/Common/Data/Convert/ColorConv.h index 077533171b..a7355dbb9d 100644 --- a/Common/Data/Convert/ColorConv.h +++ b/Common/Data/Convert/ColorConv.h @@ -101,6 +101,14 @@ inline u16 RGBA8888ToRGBA5551(u32 value) { return (u16)(r | g | b | a); } +// Used in fast sprite path. +inline u16 RGBA8888ToRGBA555X(u32 value) { + u32 r = (value >> 3) & 0x1F; + u32 g = (value >> 6) & (0x1F << 5); + u32 b = (value >> 9) & (0x1F << 10); + return (u16)(r | g | b); +} + inline u16 RGBA8888ToRGBA4444(u32 value) { const u32 c = value >> 4; const u16 r = (c >> 0) & 0x000F; @@ -110,6 +118,14 @@ inline u16 RGBA8888ToRGBA4444(u32 value) { return r | g | b | a; } +inline u16 RGBA8888ToRGBA444X(u32 value) { + const u32 c = value >> 4; + const u16 r = (c >> 0) & 0x000F; + const u16 g = (c >> 4) & 0x00F0; + const u16 b = (c >> 8) & 0x0F00; + return r | g | b; +} + // convert image to 8888, parallelizable // TODO: Implement these in terms of the conversion functions below. void convert4444_gl(u16* data, u32* out, int width, int l, int u); diff --git a/Common/Data/Format/IniFile.cpp b/Common/Data/Format/IniFile.cpp index cd2a658e5c..72aeee6f89 100644 --- a/Common/Data/Format/IniFile.cpp +++ b/Common/Data/Format/IniFile.cpp @@ -174,6 +174,19 @@ std::string* Section::GetLine(const char* key, std::string* valueOut, std::strin return 0; } +const std::string* Section::GetLine(const char* key, std::string* valueOut, std::string* commentOut) const +{ + for (std::vector::const_iterator iter = lines.begin(); iter != lines.end(); ++iter) + { + const std::string& line = *iter; + std::string lineKey; + ParseLine(line, &lineKey, valueOut, commentOut); + if (!strcasecmp(lineKey.c_str(), key)) + return &line; + } + return 0; +} + void Section::Set(const char* key, uint32_t newValue) { Set(key, StringFromFormat("0x%08x", newValue).c_str()); } @@ -218,7 +231,7 @@ void Section::Set(const char* key, const std::string& newValue, const std::strin Delete(key); } -bool Section::Get(const char* key, std::string* value, const char* defaultValue) +bool Section::Get(const char* key, std::string* value, const char* defaultValue) const { const std::string* line = GetLine(key, value, 0); if (!line) @@ -275,7 +288,7 @@ void Section::AddComment(const std::string &comment) { lines.emplace_back("# " + comment); } -bool Section::Get(const char* key, std::vector& values) +bool Section::Get(const char* key, std::vector& values) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -303,7 +316,7 @@ bool Section::Get(const char* key, std::vector& values) return true; } -bool Section::Get(const char* key, int* value, int defaultValue) +bool Section::Get(const char* key, int* value, int defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -313,7 +326,7 @@ bool Section::Get(const char* key, int* value, int defaultValue) return false; } -bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue) +bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -323,7 +336,7 @@ bool Section::Get(const char* key, uint32_t* value, uint32_t defaultValue) return false; } -bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue) +bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -333,7 +346,7 @@ bool Section::Get(const char* key, uint64_t* value, uint64_t defaultValue) return false; } -bool Section::Get(const char* key, bool* value, bool defaultValue) +bool Section::Get(const char* key, bool* value, bool defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -343,7 +356,7 @@ bool Section::Get(const char* key, bool* value, bool defaultValue) return false; } -bool Section::Get(const char* key, float* value, float defaultValue) +bool Section::Get(const char* key, float* value, float defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); @@ -353,7 +366,7 @@ bool Section::Get(const char* key, float* value, float defaultValue) return false; } -bool Section::Get(const char* key, double* value, double defaultValue) +bool Section::Get(const char* key, double* value, double defaultValue) const { std::string temp; bool retval = Get(key, &temp, 0); diff --git a/Common/Data/Format/IniFile.h b/Common/Data/Format/IniFile.h index 87bd1d1830..707f0ab3eb 100644 --- a/Common/Data/Format/IniFile.h +++ b/Common/Data/Format/IniFile.h @@ -25,14 +25,16 @@ public: std::map ToMap() const; - std::string* GetLine(const char* key, std::string* valueOut, std::string* commentOut); + std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut); + const std::string *GetLine(const char* key, std::string* valueOut, std::string* commentOut) const; + void Set(const char* key, const char* newValue); void Set(const char* key, const std::string& newValue, const std::string& defaultValue); void Set(const std::string &key, const std::string &value) { Set(key.c_str(), value.c_str()); } - bool Get(const char* key, std::string* value, const char* defaultValue); + bool Get(const char* key, std::string* value, const char* defaultValue) const; void Set(const char* key, uint32_t newValue); void Set(const char* key, uint64_t newValue); @@ -57,13 +59,13 @@ public: void AddComment(const std::string &comment); - bool Get(const char* key, int* value, int defaultValue = 0); - bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0); - bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0); - bool Get(const char* key, bool* value, bool defaultValue = false); - bool Get(const char* key, float* value, float defaultValue = false); - bool Get(const char* key, double* value, double defaultValue = false); - bool Get(const char* key, std::vector& values); + bool Get(const char* key, int* value, int defaultValue = 0) const; + bool Get(const char* key, uint32_t* value, uint32_t defaultValue = 0) const; + bool Get(const char* key, uint64_t* value, uint64_t defaultValue = 0) const; + bool Get(const char* key, bool* value, bool defaultValue = false) const; + bool Get(const char* key, float* value, float defaultValue = false) const; + bool Get(const char* key, double* value, double defaultValue = false) const; + bool Get(const char* key, std::vector& values) const; bool operator < (const Section& other) const { return name_ < other.name_; diff --git a/Common/Serialize/SerializeSet.h b/Common/Serialize/SerializeSet.h index 7e22f21e56..642b0dc6bb 100644 --- a/Common/Serialize/SerializeSet.h +++ b/Common/Serialize/SerializeSet.h @@ -46,9 +46,8 @@ void DoSet(PointerWrap &p, std::set &x) { Do(p, *itr++); } break; - - default: - ERROR_LOG(SAVESTATE, "Savestate error: invalid mode %d.", p.mode); + case PointerWrap::MODE_NOOP: + break; } } diff --git a/Common/Serialize/Serializer.cpp b/Common/Serialize/Serializer.cpp index ebe0e10d68..71f5168c3b 100644 --- a/Common/Serialize/Serializer.cpp +++ b/Common/Serialize/Serializer.cpp @@ -76,7 +76,7 @@ PointerWrapSection PointerWrap::Section(const char *title, int minVer, int ver) return PointerWrapSection(*this, -1, title); } if (!checkpoints_[curCheckpoint_].Matches(marker, offset)) { - WARN_LOG(SAVESTATE, "Checkpoint mismatch during write! Section %s but expected %s, offset %d but expected %d", title, marker, offset, (int)checkpoints_[curCheckpoint_].offset); + WARN_LOG(SAVESTATE, "Checkpoint mismatch during write! Section %s but expected %s, offset %d but expected %d", title, marker, (int)offset, (int)checkpoints_[curCheckpoint_].offset); if (curCheckpoint_ > 1) { WARN_LOG(SAVESTATE, "Previous checkpoint: %s (%d)", checkpoints_[curCheckpoint_ - 1].title, (int)checkpoints_[curCheckpoint_ - 1].offset); } @@ -171,6 +171,7 @@ void Do(PointerWrap &p, std::string &x) { case PointerWrap::MODE_READ: x = (char*)*p.ptr; break; case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break; case PointerWrap::MODE_MEASURE: break; + case PointerWrap::MODE_NOOP: break; case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(!strcmp(x.c_str(), (char*)*p.ptr), "Savestate verification failure: \"%s\" != \"%s\" (at %p).\n", x.c_str(), (char *)*p.ptr, p.ptr); break; } (*p.ptr) += stringLen; @@ -198,6 +199,7 @@ void Do(PointerWrap &p, std::wstring &x) { case PointerWrap::MODE_READ: x = read(); break; case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break; case PointerWrap::MODE_MEASURE: break; + case PointerWrap::MODE_NOOP: break; case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(x == read(), "Savestate verification failure: \"%ls\" != \"%ls\" (at %p).\n", x.c_str(), read().c_str(), p.ptr); break; } (*p.ptr) += stringLen; @@ -225,6 +227,7 @@ void Do(PointerWrap &p, std::u16string &x) { case PointerWrap::MODE_READ: x = read(); break; case PointerWrap::MODE_WRITE: memcpy(*p.ptr, x.c_str(), stringLen); break; case PointerWrap::MODE_MEASURE: break; + case PointerWrap::MODE_NOOP: break; case PointerWrap::MODE_VERIFY: _dbg_assert_msg_(x == read(), "Savestate verification failure: (at %p).\n", p.ptr); break; } (*p.ptr) += stringLen; diff --git a/Common/UI/UIScreen.cpp b/Common/UI/UIScreen.cpp index c56d09856a..63b743d33a 100644 --- a/Common/UI/UIScreen.cpp +++ b/Common/UI/UIScreen.cpp @@ -312,10 +312,6 @@ void PopupScreen::TriggerFinish(DialogResult result) { } } -void PopupScreen::resized() { - RecreateViews(); -} - void PopupScreen::CreateViews() { using namespace UI; UIContext &dc = *screenManager()->getUIContext(); @@ -336,7 +332,9 @@ void PopupScreen::CreateViews() { box_->SetDropShadowExpand(std::max(dp_xres, dp_yres)); View *title = new PopupHeader(title_); - box_->Add(title); + if (HasTitleBar()) { + box_->Add(title); + } CreatePopupContents(box_); root_->SetDefaultFocusView(box_); @@ -403,6 +401,39 @@ UI::EventReturn ListPopupScreen::OnListChoice(UI::EventParams &e) { namespace UI { +PopupContextMenuScreen::PopupContextMenuScreen(const ContextMenuItem *items, size_t itemCount, I18NCategory *category, UI::View *sourceView) + : PopupScreen("", "", ""), items_(items), itemCount_(itemCount), category_(category), sourceView_(sourceView) +{ + enabled_.resize(itemCount, true); + SetPopupOrigin(sourceView); +} + +void PopupContextMenuScreen::CreatePopupContents(UI::ViewGroup *parent) { + for (size_t i = 0; i < itemCount_; i++) { + if (items_[i].imageID) { + Choice *choice = new Choice(category_->T(items_[i].text), ImageID(items_[i].imageID)); + parent->Add(choice); + if (enabled_[i]) { + choice->OnClick.Add([=](EventParams &p) { + TriggerFinish(DR_OK); + p.a = (uint32_t)i; + OnChoice.Dispatch(p); + return EVENT_DONE; + }); + } + else { + choice->SetEnabled(false); + } + } + } + + // Hacky: Override the position to look like a popup menu. + AnchorLayoutParams *ap = (AnchorLayoutParams *)parent->GetLayoutParams(); + ap->center = false; + ap->left = sourceView_->GetBounds().x; + ap->top = sourceView_->GetBounds().y2(); +} + std::string ChopTitle(const std::string &title) { size_t pos = title.find('\n'); if (pos != title.npos) { @@ -814,7 +845,7 @@ void AbstractChoiceWithValueDisplay::GetContentDimensionsBySpec(const UIContext const std::string valueText = ValueText(); int paddingX = 12; // Assume we want at least 20% of the size for the label, at a minimum. - float availWidth = (horiz.size - paddingX * 2) * 0.8f; + float availWidth = (horiz.size - paddingX * 2) * (text_.empty() ? 1.0f : 0.8f); if (availWidth < 0) { availWidth = 65535.0f; } @@ -826,11 +857,15 @@ void AbstractChoiceWithValueDisplay::GetContentDimensionsBySpec(const UIContext valueW += paddingX; // Give the choice itself less space to grow in, so it shrinks if needed. - MeasureSpec horizLabel = horiz; - horizLabel.size -= valueW; + // MeasureSpec horizLabel = horiz; + // horizLabel.size -= valueW; Choice::GetContentDimensionsBySpec(dc, horiz, vert, w, h); w += valueW; + // Fill out anyway if there's space. + if (horiz.type == AT_MOST && w < horiz.size) { + w = horiz.size; + } h = std::max(h, valueH); } diff --git a/Common/UI/UIScreen.h b/Common/UI/UIScreen.h index 4b113d3001..1b25dc4231 100644 --- a/Common/UI/UIScreen.h +++ b/Common/UI/UIScreen.h @@ -76,7 +76,6 @@ public: virtual bool isTransparent() const override { return true; } virtual bool touch(const TouchInput &touch) override; virtual bool key(const KeyInput &key) override; - virtual void resized() override; virtual void TriggerFinish(DialogResult result) override; @@ -91,6 +90,7 @@ protected: virtual bool ShowButtons() const { return true; } virtual bool CanComplete(DialogResult result) { return true; } virtual void OnCompleted(DialogResult result) {} + virtual bool HasTitleBar() const { return true; } const std::string &Title() { return title_; } virtual void update() override; @@ -250,7 +250,7 @@ public: Event OnChange; private: - virtual void OnCompleted(DialogResult result) override; + void OnCompleted(DialogResult result) override; TextEdit *edit_; std::string *value_; std::string textEditValue_; @@ -258,13 +258,45 @@ private: int maxLen_; }; +// TODO: Break out a lot of popup stuff from UIScreen.h. + +struct ContextMenuItem { + const char *text; + const char *imageID; +}; + +// Once a selection has been made, +class PopupContextMenuScreen : public PopupScreen { +public: + PopupContextMenuScreen(const ContextMenuItem *items, size_t itemCount, I18NCategory *category, UI::View *sourceView); + void CreatePopupContents(ViewGroup *parent) override; + + const char *tag() const override { return "ContextMenuPopup"; } + + void SetEnabled(size_t index, bool enabled) { + enabled_[index] = enabled; + } + + UI::Event OnChoice; + +protected: + bool HasTitleBar() const { return false; } + +private: + const ContextMenuItem *items_; + size_t itemCount_; + I18NCategory *category_; + UI::View *sourceView_; + std::vector enabled_; +}; + class AbstractChoiceWithValueDisplay : public UI::Choice { public: AbstractChoiceWithValueDisplay(const std::string &text, LayoutParams *layoutParams = nullptr) : Choice(text, layoutParams) { } - virtual void Draw(UIContext &dc) override; + void Draw(UIContext &dc) override; void GetContentDimensionsBySpec(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert, float &w, float &h) const override; protected: @@ -463,8 +495,8 @@ public: private: std::string ValueText() const override; - int *iValue_ = nullptr; std::string *sValue_ = nullptr; + int *iValue_ = nullptr; const char *category_ = nullptr; std::string (*translateCallback_)(const char *value) = nullptr; }; diff --git a/Common/UI/View.cpp b/Common/UI/View.cpp index cf741f5884..769089e375 100644 --- a/Common/UI/View.cpp +++ b/Common/UI/View.cpp @@ -16,6 +16,7 @@ #include "Common/System/System.h" #include "Common/TimeUtil.h" #include "Common/StringUtils.h" +#include "Common/Log.h" namespace UI { @@ -24,7 +25,6 @@ static constexpr float MIN_TEXT_SCALE = 0.8f; static constexpr float MAX_ITEM_SIZE = 65535.0f; void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measured) { - *measured = sz; if (sz == WRAP_CONTENT) { if (spec.type == UNSPECIFIED) *measured = contentWidth; @@ -40,6 +40,8 @@ void MeasureBySpec(Size sz, float contentWidth, MeasureSpec spec, float *measure *measured = spec.size; } else if (spec.type == EXACTLY || (spec.type == AT_MOST && *measured > spec.size)) { *measured = spec.size; + } else { + *measured = sz; } } @@ -413,6 +415,7 @@ void ClickableItem::GetContentDimensions(const UIContext &dc, float &w, float &h ClickableItem::ClickableItem(LayoutParams *layoutParams) : Clickable(layoutParams) { if (!layoutParams) { + // The default LayoutParams assigned by View::View defaults to WRAP_CONTENT/WRAP_CONTENT. if (layoutParams_->width == WRAP_CONTENT) layoutParams_->width = FILL_PARENT; } @@ -497,6 +500,7 @@ void Choice::Draw(UIContext &dc) { if (image_.isValid()) { const AtlasImage *image = dc.Draw()->GetAtlas()->getImage(image_); + _dbg_assert_(image); paddingX += image->w + 6; availWidth -= image->w + 6; // TODO: Use scale rotation and flip here as well (DrawImageRotated is always ALIGN_CENTER for now) @@ -696,28 +700,55 @@ void CheckBox::Draw(UIContext &dc) { if (!IsEnabled()) { style = dc.theme->itemDisabledStyle; } - if (HasFocus()) { - style = dc.theme->itemFocusedStyle; - } - if (down_) { - style = dc.theme->itemDownStyle; + ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff; + + // In image mode, light up instead of showing a checkbox. + if (imageID_.isValid()) { + image = imageID_; + if (Toggled()) { + if (HasFocus()) { + style = dc.theme->itemDownStyle; + } else { + style = dc.theme->itemFocusedStyle; + } + } else { + if (HasFocus()) { + style = dc.theme->itemDownStyle; + } else { + style = dc.theme->itemStyle; + } + } + + if (down_) { + style.background.color = lightenColor(style.background.color); + } + + } else { + if (HasFocus()) { + style = dc.theme->itemFocusedStyle; + } + if (down_) { + style = dc.theme->itemDownStyle; + } } + dc.SetFontStyle(dc.theme->uiFont); - ClickableItem::Draw(dc); + DrawBG(dc, style); - ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff; float imageW, imageH; dc.Draw()->MeasureImage(image, &imageW, &imageH); const int paddingX = 12; // Padding right of the checkbox image too. const float availWidth = bounds_.w - paddingX * 2 - imageW - paddingX; - float scale = CalculateTextScale(dc, availWidth); - dc.SetFontScale(scale, scale); - Bounds textBounds(bounds_.x + paddingX, bounds_.y, availWidth, bounds_.h); - dc.DrawTextRect(text_.c_str(), textBounds, style.fgColor, ALIGN_VCENTER | FLAG_WRAP_TEXT); + if (!text_.empty()) { + float scale = CalculateTextScale(dc, availWidth); + dc.SetFontScale(scale, scale); + Bounds textBounds(bounds_.x + paddingX, bounds_.y, availWidth, bounds_.h); + dc.DrawTextRect(text_.c_str(), textBounds, style.fgColor, ALIGN_VCENTER | FLAG_WRAP_TEXT); + } dc.Draw()->DrawImage(image, bounds_.x2() - paddingX, bounds_.centerY(), 1.0f, style.fgColor, ALIGN_RIGHT | ALIGN_VCENTER); dc.SetFontScale(1.0f, 1.0f); } @@ -743,24 +774,41 @@ float CheckBox::CalculateTextScale(const UIContext &dc, float availWidth) const void CheckBox::GetContentDimensions(const UIContext &dc, float &w, float &h) const { ImageID image = Toggled() ? dc.theme->checkOn : dc.theme->checkOff; + if (imageID_.isValid()) { + image = imageID_; + } + float imageW, imageH; dc.Draw()->MeasureImage(image, &imageW, &imageH); const int paddingX = 12; + + if (imageID_.isValid()) { + w = imageW + paddingX * 2; + h = std::max(imageH, ITEM_HEIGHT); + return; + } + + // The below code is kinda wacky, we shouldn't involve bounds_ here. + // Padding right of the checkbox image too. float availWidth = bounds_.w - paddingX * 2 - imageW - paddingX; if (availWidth < 0.0f) { // Let it have as much space as it needs. availWidth = MAX_ITEM_SIZE; } - float scale = CalculateTextScale(dc, availWidth); - float actualWidth, actualHeight; - Bounds availBounds(0, 0, availWidth, bounds_.h); - dc.MeasureTextRect(dc.theme->uiFont, scale, scale, text_.c_str(), (int)text_.size(), availBounds, &actualWidth, &actualHeight, ALIGN_VCENTER | FLAG_WRAP_TEXT); + if (!text_.empty()) { + float scale = CalculateTextScale(dc, availWidth); + float actualWidth, actualHeight; + Bounds availBounds(0, 0, availWidth, bounds_.h); + dc.MeasureTextRect(dc.theme->uiFont, scale, scale, text_.c_str(), (int)text_.size(), availBounds, &actualWidth, &actualHeight, ALIGN_VCENTER | FLAG_WRAP_TEXT); + h = std::max(actualHeight, ITEM_HEIGHT); + } else { + h = std::max(imageH, ITEM_HEIGHT); + } w = bounds_.w; - h = std::max(actualHeight, ITEM_HEIGHT); } void BitCheckBox::Toggle() { diff --git a/Common/UI/View.h b/Common/UI/View.h index 64c9cdacf8..0d52216771 100644 --- a/Common/UI/View.h +++ b/Common/UI/View.h @@ -827,11 +827,17 @@ private: class CheckBox : public ClickableItem { public: - CheckBox(bool *toggle, const std::string &text, const std::string &smallText = "", LayoutParams *layoutParams = 0) + CheckBox(bool *toggle, const std::string &text, const std::string &smallText = "", LayoutParams *layoutParams = nullptr) : ClickableItem(layoutParams), toggle_(toggle), text_(text), smallText_(smallText) { OnClick.Handle(this, &CheckBox::OnClicked); } + // Image-only "checkbox", lights up instead of showing a checkmark. + CheckBox(bool *toggle, ImageID imageID, LayoutParams *layoutParams = nullptr) + : ClickableItem(layoutParams), toggle_(toggle), imageID_(imageID) { + OnClick.Handle(this, &CheckBox::OnClicked); + } + void Draw(UIContext &dc) override; std::string DescribeText() const override; void GetContentDimensions(const UIContext &dc, float &w, float &h) const override; @@ -846,6 +852,7 @@ private: bool *toggle_; std::string text_; std::string smallText_; + ImageID imageID_; }; class BitCheckBox : public CheckBox { diff --git a/Common/UI/ViewGroup.cpp b/Common/UI/ViewGroup.cpp index eefb93d82f..f32bd6fd37 100644 --- a/Common/UI/ViewGroup.cpp +++ b/Common/UI/ViewGroup.cpp @@ -100,7 +100,11 @@ bool ViewGroup::Touch(const TouchInput &input) { } } } - return any; + if (clickableBackground_) { + return any || bounds_.Contains(input.x, input.y); + } else { + return any; + } } void ViewGroup::Query(float x, float y, std::vector &list) { @@ -510,8 +514,9 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v float sum = 0.0f; float maxOther = 0.0f; float totalWeight = 0.0f; - float weightSum = 0.0f; - float weightZeroSum = 0.0f; + + float weightSum = 0.0f; // Total sum of weights + float weightZeroSum = 0.0f; // Sum of sizes of things with weight 0.0, a bit confusingly named int numVisible = 0; @@ -589,8 +594,11 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v for (View *view : views_) { if (view->GetVisibility() == V_GONE) continue; - const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As(); + // FILL_PARENT is not appropriate in this direction. It gets ignored though. + // We have a bit too many of these due to the hack in the ClickableItem constructor. + // _dbg_assert_(view->GetLayoutParams()->width != UI::FILL_PARENT); + const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As(); if (linLayoutParams && linLayoutParams->weight > 0.0f) { Margins margins = defaultMargins_; if (linLayoutParams->HasMargins()) @@ -634,8 +642,11 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v for (View *view : views_) { if (view->GetVisibility() == V_GONE) continue; - const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As(); + // FILL_PARENT is not appropriate in this direction. It gets ignored though. + // We have a bit too many of these due to the hack in the ClickableItem constructor. + // _dbg_assert_(view->GetLayoutParams()->height != UI::FILL_PARENT); + const LinearLayoutParams *linLayoutParams = view->GetLayoutParams()->As(); if (linLayoutParams && linLayoutParams->weight > 0.0f) { Margins margins = defaultMargins_; if (linLayoutParams->HasMargins()) @@ -645,6 +656,7 @@ void LinearLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec v h = MeasureSpec(AT_MOST, measuredWidth_); float unit = (allowedHeight - weightZeroSum) / weightSum; if (weightSum == 0.0f) { + // We must have gotten an inf. unit = 1.0f; } MeasureSpec v(AT_MOST, unit * linLayoutParams->weight - margins.vert()); @@ -1589,6 +1601,7 @@ StickyChoice *ChoiceStrip::Choice(int index) { return static_cast(views_[index]); return nullptr; } + ListView::ListView(ListAdaptor *a, std::set hidden, LayoutParams *layoutParams) : ScrollView(ORIENT_VERTICAL, layoutParams), adaptor_(a), maxHeight_(0), hidden_(hidden) { diff --git a/Common/UI/ViewGroup.h b/Common/UI/ViewGroup.h index 05fe046681..78c42e84b1 100644 --- a/Common/UI/ViewGroup.h +++ b/Common/UI/ViewGroup.h @@ -78,6 +78,7 @@ public: void SetHasDropShadow(bool has) { hasDropShadow_ = has; } void SetDropShadowExpand(float s) { dropShadowExpand_ = s; } void SetExclusiveTouch(bool exclusive) { exclusiveTouch_ = exclusive; } + void SetClickableBackground(bool clickableBackground) { clickableBackground_ = clickableBackground; } void Lock() { modifyLock_.lock(); } void Unlock() { modifyLock_.unlock(); } @@ -96,6 +97,7 @@ protected: Drawable bg_; float dropShadowExpand_ = 0.0f; bool hasDropShadow_ = false; + bool clickableBackground_ = false; bool clip_ = false; bool exclusiveTouch_ = false; }; diff --git a/Common/VR/PPSSPPVR.cpp b/Common/VR/PPSSPPVR.cpp index 0a0ac9dd2f..98e2ee7ec0 100644 --- a/Common/VR/PPSSPPVR.cpp +++ b/Common/VR/PPSSPPVR.cpp @@ -141,7 +141,7 @@ void InitVROnAndroid(void* vm, void* activity, const char* system, int version, //Set platform flags if (strcmp(vendor, "PICO") == 0) { VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_PICO, true); - VR_SetPlatformFLag(VR_PLATFORM_PICO_INIT, true); + VR_SetPlatformFLag(VR_PLATFORM_INSTANCE_EXT, true); } else if ((strcmp(vendor, "META") == 0) || (strcmp(vendor, "OCULUS") == 0)) { VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_QUEST, true); VR_SetPlatformFLag(VR_PLATFORM_PERFORMANCE_EXT, true); diff --git a/Common/VR/VRBase.cpp b/Common/VR/VRBase.cpp index 2855a75e1a..2cb2d0557d 100644 --- a/Common/VR/VRBase.cpp +++ b/Common/VR/VRBase.cpp @@ -9,34 +9,6 @@ #include #endif -enum ConfigsSetEXT { - UNREAL_VERSION = 0, - TRACKING_ORIGIN, - OPENGL_NOERROR, - ENABLE_SIX_DOF, - PRESENTATION_FLAG, - ENABLE_CPT, - PLATFORM, - FOVEATION_LEVEL, - SET_DISPLAY_RATE = 8, - MRC_TEXTURE_ID = 9, -}; - -enum PxrTrackingDof { - PXR_TRACKING_3DOF = 0, - PXR_TRACKING_6DOF = 1 -}; - -typedef XrResult (XRAPI_PTR *PFN_xrSetEngineVersionPico)(XrInstance instance,const char* version); -typedef XrResult (XRAPI_PTR *PFN_xrStartCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState); -typedef XrResult (XRAPI_PTR *PFN_xrStopCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState); -typedef XrResult (XRAPI_PTR *PFN_xrSetConfigPICO) (XrSession instance, enum ConfigsSetEXT configIndex, const char *configData); - -PFN_xrSetConfigPICO pfnXrSetConfigPICO = nullptr; -PFN_xrSetEngineVersionPico pfnXrSetEngineVersionPico = nullptr; -PFN_xrStartCVControllerThreadPico pfnXrStartCVControllerThreadPico = nullptr; -PFN_xrStopCVControllerThreadPico pfnXrStopCVControllerThreadPico = nullptr; - static bool vr_platform[VR_PLATFORM_MAX]; static engine_t vr_engine; int vr_initialized = 0; @@ -76,18 +48,13 @@ void VR_Init( void* system, const char* name, int version ) { } extensions.push_back(XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME); #ifdef ANDROID + if (VR_GetPlatformFlag(VR_PLATFORM_INSTANCE_EXT)) { + extensions.push_back(XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME); + } if (VR_GetPlatformFlag(VR_PLATFORM_PERFORMANCE_EXT)) { extensions.push_back(XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME); extensions.push_back(XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME); } - if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) { - extensions.push_back(XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME); - extensions.push_back("XR_PICO_android_controller_function_ext_enable"); - extensions.push_back("XR_PICO_view_state_ext_enable"); - extensions.push_back("XR_PICO_frame_end_info_ext"); - extensions.push_back("XR_PICO_configs_ext"); - extensions.push_back("XR_PICO_reset_sensor"); - } #endif // Create the OpenXR instance. @@ -112,7 +79,7 @@ void VR_Init( void* system, const char* name, int version ) { #ifdef ANDROID XrInstanceCreateInfoAndroidKHR instanceCreateInfoAndroid = {XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR}; - if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) { + if (VR_GetPlatformFlag(VR_PLATFORM_INSTANCE_EXT)) { ovrJava* java = (ovrJava*)system; instanceCreateInfoAndroid.applicationVM = java->Vm; instanceCreateInfoAndroid.applicationActivity = java->ActivityObject; @@ -129,15 +96,6 @@ void VR_Init( void* system, const char* name, int version ) { XRLoadInstanceFunctions(vr_engine.appState.Instance); - if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) { - xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrSetEngineVersionPico", (PFN_xrVoidFunction*)(&pfnXrSetEngineVersionPico)); - xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrStartCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStartCVControllerThreadPico)); - xrGetInstanceProcAddr(vr_engine.appState.Instance, "xrStopCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStopCVControllerThreadPico)); - xrGetInstanceProcAddr(vr_engine.appState.Instance,"xrSetConfigPICO", (PFN_xrVoidFunction*)(&pfnXrSetConfigPICO)); - if (pfnXrSetEngineVersionPico != nullptr) pfnXrSetEngineVersionPico(vr_engine.appState.Instance, "2.8.0.1"); - if (pfnXrStartCVControllerThreadPico != nullptr) pfnXrStartCVControllerThreadPico(vr_engine.appState.Instance, PXR_TRACKING_6DOF, PXR_TRACKING_6DOF); - } - XrInstanceProperties instanceInfo; instanceInfo.type = XR_TYPE_INSTANCE_PROPERTIES; instanceInfo.next = NULL; @@ -196,12 +154,6 @@ void VR_Init( void* system, const char* name, int version ) { void VR_Destroy( engine_t* engine ) { if (engine == &vr_engine) { - if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) { - if (pfnXrStopCVControllerThreadPico != nullptr) { - pfnXrStopCVControllerThreadPico(engine->appState.Instance, PXR_TRACKING_6DOF, PXR_TRACKING_6DOF); - } - } - xrDestroyInstance(engine->appState.Instance); ovrApp_Destroy(&engine->appState); } @@ -246,9 +198,6 @@ void VR_EnterVR( engine_t* engine, XrGraphicsBindingVulkanKHR* graphicsBindingVu ALOGE("Failed to create XR session: %d.", initResult); exit(1); } - if (VR_GetPlatformFlag(VR_PLATFORM_PICO_INIT)) { - pfnXrSetConfigPICO(engine->appState.Session, TRACKING_ORIGIN, "1"); - } // Create a space to the first path XrReferenceSpaceCreateInfo spaceCreateInfo = {}; diff --git a/Common/VR/VRBase.h b/Common/VR/VRBase.h index 10c2648a2f..25efb1b712 100644 --- a/Common/VR/VRBase.h +++ b/Common/VR/VRBase.h @@ -121,8 +121,8 @@ typedef struct { enum VRPlatformFlag { VR_PLATFORM_CONTROLLER_PICO, VR_PLATFORM_CONTROLLER_QUEST, + VR_PLATFORM_INSTANCE_EXT, VR_PLATFORM_PERFORMANCE_EXT, - VR_PLATFORM_PICO_INIT, VR_PLATFORM_RENDERER_VULKAN, VR_PLATFORM_TRACKING_FLOOR, VR_PLATFORM_MAX diff --git a/Core/Config.cpp b/Core/Config.cpp index e4f893d54a..31ed1956d8 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -1127,9 +1127,10 @@ static int DefaultSystemParamLanguage() { int defaultLang = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; if (g_Config.bFirstRun) { // TODO: Be smart about same language, different country - auto langValuesMapping = GetLangValuesMapping(); - if (langValuesMapping.find(g_Config.sLanguageIni) != langValuesMapping.end()) { - defaultLang = langValuesMapping[g_Config.sLanguageIni].second; + auto &langValuesMapping = g_Config.GetLangValuesMapping(); + auto iter = langValuesMapping.find(g_Config.sLanguageIni); + if (iter != langValuesMapping.end()) { + defaultLang = iter->second.second; } } return defaultLang; @@ -1276,14 +1277,12 @@ Config::~Config() { delete private_; } -std::map> GetLangValuesMapping() { - std::map> langValuesMapping; +void Config::LoadLangValuesMapping() { IniFile mapping; mapping.LoadFromVFS("langregion.ini"); std::vector keys; mapping.GetKeys("LangRegionNames", keys); - std::map langCodeMapping; langCodeMapping["JAPANESE"] = PSP_SYSTEMPARAM_LANGUAGE_JAPANESE; langCodeMapping["ENGLISH"] = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; @@ -1298,8 +1297,8 @@ std::map> GetLangValuesMapping() { langCodeMapping["CHINESE_TRADITIONAL"] = PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL; langCodeMapping["CHINESE_SIMPLIFIED"] = PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED; - Section *langRegionNames = mapping.GetOrCreateSection("LangRegionNames"); - Section *systemLanguage = mapping.GetOrCreateSection("SystemLanguage"); + const Section *langRegionNames = mapping.GetOrCreateSection("LangRegionNames"); + const Section *systemLanguage = mapping.GetOrCreateSection("SystemLanguage"); for (size_t i = 0; i < keys.size(); i++) { std::string langName; @@ -1309,9 +1308,15 @@ std::map> GetLangValuesMapping() { int iLangCode = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; if (langCodeMapping.find(langCode) != langCodeMapping.end()) iLangCode = langCodeMapping[langCode]; - langValuesMapping[keys[i]] = std::make_pair(langName, iLangCode); + langValuesMapping_[keys[i]] = std::make_pair(langName, iLangCode); } - return langValuesMapping; +} + +const std::map> &Config::GetLangValuesMapping() { + if (langValuesMapping_.empty()) { + LoadLangValuesMapping(); + } + return langValuesMapping_; } void Config::Reload() { diff --git a/Core/Config.h b/Core/Config.h index 342b5c3450..64d17da3a1 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -568,21 +568,24 @@ public: bool HasRecentIsos() const; void ClearRecentIsos(); + const std::map> &GetLangValuesMapping(); + protected: void LoadStandardControllerIni(); + void LoadLangValuesMapping(); private: bool reload_ = false; std::string gameId_; std::string gameIdTitle_; std::vector recentIsos; + std::map> langValuesMapping_; Path iniFilename_; Path controllerIniFilename_; Path searchPath_; ConfigPrivate *private_ = nullptr; }; -std::map> GetLangValuesMapping(); std::string CreateRandMAC(); // TODO: Find a better place for this. diff --git a/Core/Dialog/PSPOskDialog.cpp b/Core/Dialog/PSPOskDialog.cpp index 36574f3522..54f2ea723d 100755 --- a/Core/Dialog/PSPOskDialog.cpp +++ b/Core/Dialog/PSPOskDialog.cpp @@ -346,7 +346,7 @@ int PSPOskDialog::Init(u32 oskPtr) { inputChars += c; } - languageMapping = GetLangValuesMapping(); + languageMapping = g_Config.GetLangValuesMapping(); // Eat any keys pressed before the dialog inited. UpdateButtons(); diff --git a/Core/MemMap.cpp b/Core/MemMap.cpp index 52ef9ff5f9..50a2d564fa 100644 --- a/Core/MemMap.cpp +++ b/Core/MemMap.cpp @@ -335,6 +335,8 @@ static void DoMemoryVoid(PointerWrap &p, uint32_t start, uint32_t size) { _dbg_assert_msg_(d[i] == storage[i], "Savestate verification failure: %d (0x%X) (at %p) != %d (0x%X) (at %p).\n", d[i], d[i], &d[i], storage[i], storage[i], &storage[i]); }, 0, size, 128); break; + case PointerWrap::MODE_NOOP: + break; } storage += size; } diff --git a/GPU/Common/PostShader.h b/GPU/Common/PostShader.h index ef4e2c83b5..06fc69a159 100644 --- a/GPU/Common/PostShader.h +++ b/GPU/Common/PostShader.h @@ -19,11 +19,11 @@ // Postprocessing shader manager // For FXAA, "Natural", bloom, B&W, cross processing and whatnot. +#pragma once + #include #include -#include "Common/Data/Format/IniFile.h" - struct ShaderInfo { Path iniFile; // which ini file was this definition in? So we can write settings back later std::string section; // ini file section. This is saved. diff --git a/GPU/GLES/GPU_GLES.cpp b/GPU/GLES/GPU_GLES.cpp index a707915eb1..380fe2d2c7 100644 --- a/GPU/GLES/GPU_GLES.cpp +++ b/GPU/GLES/GPU_GLES.cpp @@ -173,11 +173,6 @@ u32 GPU_GLES::CheckGPUFeatures() const { if (gl_extensions.ARB_texture_float || gl_extensions.OES_texture_float) features |= GPU_USE_TEXTURE_FLOAT; - // The Phantasy Star hack :( - if (PSP_CoreParameter().compat.flags().DepthRangeHack && (features & GPU_USE_ACCURATE_DEPTH) == 0) { - features |= GPU_USE_DEPTH_RANGE_HACK; - } - if (!draw_->GetShaderLanguageDesc().bitwiseOps) { features |= GPU_USE_FRAGMENT_TEST_CACHE; } diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index 7e4ae0f881..cc5211a19f 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -319,38 +319,6 @@ static inline void FlipProjMatrix(Matrix4x4 &in, bool useBufferedRendering) { in[8] = -in[8]; in[12] = -in[12]; } - - // In Phantasy Star Portable 2, depth range sometimes goes negative and is clamped by glDepthRange to 0, - // causing graphics clipping glitch (issue #1788). This hack modifies the projection matrix to work around it. - if (gstate_c.Use(GPU_USE_DEPTH_RANGE_HACK)) { - float zScale = gstate.getViewportZScale() / 65535.0f; - float zCenter = gstate.getViewportZCenter() / 65535.0f; - - // if far depth range < 0 - if (zCenter + zScale < 0.0f) { - // if perspective projection - if (in[11] < 0.0f) { - float depthMax = gstate.getDepthRangeMax() / 65535.0f; - float depthMin = gstate.getDepthRangeMin() / 65535.0f; - - float a = in[10]; - float b = in[14]; - - float n = b / (a - 1.0f); - float f = b / (a + 1.0f); - - f = (n * f) / (n + ((zCenter + zScale) * (n - f) / (depthMax - depthMin))); - - a = (n + f) / (n - f); - b = (2.0f * n * f) / (n - f); - - if (!my_isnan(a) && !my_isnan(b)) { - in[10] = a; - in[14] = b; - } - } - } - } } static inline bool GuessVRDrawingHUD(bool is2D, bool flatScreen) { diff --git a/GPU/GPUCommon.cpp b/GPU/GPUCommon.cpp index 20d97649df..bbfa7f3090 100644 --- a/GPU/GPUCommon.cpp +++ b/GPU/GPUCommon.cpp @@ -3537,6 +3537,11 @@ u32 GPUCommon::CheckGPUFeatures() const { features |= GPU_USE_CLEAR_RAM_HACK; } + // Even without depth clamp, force accurate depth on for some games that break without it. + if (PSP_CoreParameter().compat.flags().DepthRangeHack) { + features |= GPU_USE_ACCURATE_DEPTH; + } + return features; } diff --git a/GPU/GPUCommon.h b/GPU/GPUCommon.h index 4b47c65570..c15afe508f 100644 --- a/GPU/GPUCommon.h +++ b/GPU/GPUCommon.h @@ -265,7 +265,7 @@ protected: void DeviceLost() override; void DeviceRestore() override; - void ClearCacheNextFrame(); + void ClearCacheNextFrame() override; virtual void CheckRenderResized(); diff --git a/GPU/GPUState.cpp b/GPU/GPUState.cpp index 95568e1e93..ba0e650bb6 100644 --- a/GPU/GPUState.cpp +++ b/GPU/GPUState.cpp @@ -375,7 +375,7 @@ static const char *const gpuUseFlagNames[32] = { "GPU_USE_VS_RANGE_CULLING", "GPU_USE_BLEND_MINMAX", "GPU_USE_LOGIC_OP", - "GPU_USE_DEPTH_RANGE_HACK", + "N/A", "GPU_USE_TEXTURE_NPOT", "GPU_USE_ANISOTROPY", "GPU_USE_CLEAR_RAM_HACK", @@ -388,7 +388,7 @@ static const char *const gpuUseFlagNames[32] = { "GPU_USE_DEPTH_TEXTURE", "GPU_USE_ACCURATE_DEPTH", "GPU_USE_GS_CULLING", - "GPU_USE_REVERSE_COLOR_ORDER", + "N/A", "GPU_USE_FRAMEBUFFER_FETCH", "GPU_SCALE_DEPTH_FROM_24BIT_TO_16BIT", "GPU_ROUND_FRAGMENT_DEPTH_TO_16BIT", @@ -409,4 +409,4 @@ const char *GpuUseFlagToString(int useFlag) { } else { return "N/A"; } -} \ No newline at end of file +} diff --git a/GPU/GPUState.h b/GPU/GPUState.h index 02fba9c309..e5acb39a18 100644 --- a/GPU/GPUState.h +++ b/GPU/GPUState.h @@ -478,7 +478,7 @@ enum { GPU_USE_VS_RANGE_CULLING = FLAG_BIT(3), GPU_USE_BLEND_MINMAX = FLAG_BIT(4), GPU_USE_LOGIC_OP = FLAG_BIT(5), - GPU_USE_DEPTH_RANGE_HACK = FLAG_BIT(6), + // Bit 6 is free. GPU_USE_TEXTURE_NPOT = FLAG_BIT(7), GPU_USE_ANISOTROPY = FLAG_BIT(8), GPU_USE_CLEAR_RAM_HACK = FLAG_BIT(9), diff --git a/GPU/Software/BinManager.cpp b/GPU/Software/BinManager.cpp index ac50f4c5a3..7906cbe79f 100644 --- a/GPU/Software/BinManager.cpp +++ b/GPU/Software/BinManager.cpp @@ -172,9 +172,7 @@ void BinManager::UpdateState() { creatingState_ = true; stateIndex_ = (uint16_t)states_.Push(RasterizerState()); // When new funcs are compiled, we need to flush if WX exclusive. - ComputeRasterizerState(&states_[stateIndex_], [&]() { - Flush("compile"); - }); + ComputeRasterizerState(&states_[stateIndex_], this); states_[stateIndex_].samplerID.cached.clut = cluts_[clutIndex_].readable; creatingState_ = false; diff --git a/GPU/Software/DrawPixel.cpp b/GPU/Software/DrawPixel.cpp index 2f4ea23b17..97e84b6807 100644 --- a/GPU/Software/DrawPixel.cpp +++ b/GPU/Software/DrawPixel.cpp @@ -20,6 +20,7 @@ #include "Common/Data/Convert/ColorConv.h" #include "Core/Config.h" #include "GPU/GPUState.h" +#include "GPU/Software/BinManager.h" #include "GPU/Software/DrawPixel.h" #include "GPU/Software/FuncId.h" #include "GPU/Software/Rasterizer.h" @@ -707,8 +708,8 @@ void SOFTRAST_CALL DrawSinglePixel(int x, int y, int z, int fog, Vec4IntArg colo SetPixelColor(fbFormat, pixelID.cached.framebufStride, x, y, new_color, old_color, targetWriteMask); } -SingleFunc GetSingleFunc(const PixelFuncID &id, std::function flushForCompile) { - SingleFunc jitted = jitCache->GetSingle(id, flushForCompile); +SingleFunc GetSingleFunc(const PixelFuncID &id, BinManager *binner) { + SingleFunc jitted = jitCache->GetSingle(id, binner); if (jitted) { return jitted; } @@ -743,11 +744,15 @@ SingleFunc PixelJitCache::GenericSingle(const PixelFuncID &id) { return nullptr; } +thread_local PixelJitCache::LastCache PixelJitCache::lastSingle_; + // 256k should be plenty of space for plenty of variations. PixelJitCache::PixelJitCache() : CodeBlock(1024 * 64 * 4), cache_(64) { + lastSingle_.gen = -1; } void PixelJitCache::Clear() { + clearGen_++; CodeBlock::Clear(); cache_.Clear(); addresses_.clear(); @@ -786,26 +791,29 @@ void PixelJitCache::Flush() { compileQueue_.clear(); } -SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, std::function flushForCompile) { +SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, BinManager *binner) { if (!g_Config.bSoftwareRenderingJit) return nullptr; - std::unique_lock guard(jitCacheLock); const size_t key = std::hash()(id); + if (lastSingle_.Match(key, clearGen_)) + return lastSingle_.func; + std::unique_lock guard(jitCacheLock); auto it = cache_.Get(key); if (it != nullptr) { + lastSingle_.Set(key, it, clearGen_); return it; } - if (!flushForCompile) { + if (!binner) { // Can't compile, let's try to do it later when there's an opportunity. compileQueue_.insert(id); return nullptr; } guard.unlock(); - flushForCompile(); + binner->Flush("compile"); guard.lock(); for (const auto &queued : compileQueue_) { @@ -820,7 +828,9 @@ SingleFunc PixelJitCache::GetSingle(const PixelFuncID &id, std::function if (!cache_.Get(key)) Compile(id); - return cache_.Get(key); + it = cache_.Get(key); + lastSingle_.Set(key, it, clearGen_); + return it; } void PixelJitCache::Compile(const PixelFuncID &id) { diff --git a/GPU/Software/DrawPixel.h b/GPU/Software/DrawPixel.h index e9d2715da4..d72c04a744 100644 --- a/GPU/Software/DrawPixel.h +++ b/GPU/Software/DrawPixel.h @@ -19,7 +19,6 @@ #include "ppsspp_config.h" -#include #include #include #include @@ -29,6 +28,8 @@ #include "GPU/Software/FuncId.h" #include "GPU/Software/RasterizerRegCache.h" +class BinManager; + namespace Rasterizer { // Our std::unordered_map argument will ignore the alignment attribute, but that doesn't matter. @@ -39,7 +40,7 @@ namespace Rasterizer { #endif typedef void (SOFTRAST_CALL *SingleFunc)(int x, int y, int z, int fog, Vec4IntArg color_in, const PixelFuncID &pixelID); -SingleFunc GetSingleFunc(const PixelFuncID &id, std::function flushForCompile); +SingleFunc GetSingleFunc(const PixelFuncID &id, BinManager *binner); void Init(); void FlushJit(); @@ -64,7 +65,7 @@ public: PixelJitCache(); // Returns a pointer to the code to run. - SingleFunc GetSingle(const PixelFuncID &id, std::function flushForCompile); + SingleFunc GetSingle(const PixelFuncID &id, BinManager *binner); SingleFunc GenericSingle(const PixelFuncID &id); void Clear() override; void Flush(); @@ -108,9 +109,27 @@ private: bool Jit_ConvertFrom5551(const PixelFuncID &id, RegCache::Reg colorReg, RegCache::Reg temp1Reg, RegCache::Reg temp2Reg, bool keepAlpha); bool Jit_ConvertFrom4444(const PixelFuncID &id, RegCache::Reg colorReg, RegCache::Reg temp1Reg, RegCache::Reg temp2Reg, bool keepAlpha); + struct LastCache { + size_t key; + SingleFunc func; + int gen = -1; + + bool Match(size_t k, int g) const { + return key == k && gen == g; + } + + void Set(size_t k, SingleFunc f, int g) { + key = k; + func = f; + gen = g; + } + }; + DenseHashMap cache_; std::unordered_map addresses_; std::unordered_set compileQueue_; + int clearGen_ = 0; + static thread_local LastCache lastSingle_; const u8 *constBlendHalf_11_4s_ = nullptr; const u8 *constBlendInvert_11_4s_ = nullptr; diff --git a/GPU/Software/Rasterizer.cpp b/GPU/Software/Rasterizer.cpp index 7059d52973..4b9ed61d27 100644 --- a/GPU/Software/Rasterizer.cpp +++ b/GPU/Software/Rasterizer.cpp @@ -93,15 +93,15 @@ static inline Vec4 Interpolate(const float &c0, const float &c1, const fl return Interpolate(c0, c1, c2, w0.Cast(), w1.Cast(), w2.Cast(), wsum_recip); } -void ComputeRasterizerState(RasterizerState *state, std::function flushForCompile) { +void ComputeRasterizerState(RasterizerState *state, BinManager *binner) { ComputePixelFuncID(&state->pixelID); - state->drawPixel = Rasterizer::GetSingleFunc(state->pixelID, flushForCompile); + state->drawPixel = Rasterizer::GetSingleFunc(state->pixelID, binner); state->enableTextures = gstate.isTextureMapEnabled() && !state->pixelID.clearMode; if (state->enableTextures) { ComputeSamplerID(&state->samplerID); - state->linear = Sampler::GetLinearFunc(state->samplerID, flushForCompile); - state->nearest = Sampler::GetNearestFunc(state->samplerID, flushForCompile); + state->linear = Sampler::GetLinearFunc(state->samplerID, binner); + state->nearest = Sampler::GetNearestFunc(state->samplerID, binner); // Since the definitions are the same, just force this setting using the func pointer. if (g_Config.iTexFiltering == TEX_FILTER_FORCE_LINEAR) { @@ -224,24 +224,34 @@ static bool CheckClutAlphaFull(RasterizerState *state) { if (samplerID.hasClutMask) count = std::min(count, ((samplerID.cached.clutFormat >> 8) & 0xFF) + 1); + u32 alphaSum = 0xFFFFFFFF; + if (samplerID.ClutFmt() == GE_CMODE_32BIT_ABGR8888) { + CheckMask32((const uint32_t *)samplerID.cached.clut, count, &alphaSum); + } else { + CheckMask16((const uint16_t *)samplerID.cached.clut, count, &alphaSum); + } + bool onlyFull = true; switch (samplerID.ClutFmt()) { case GE_CMODE_16BIT_BGR5650: break; case GE_CMODE_16BIT_ABGR5551: - onlyFull = CheckAlpha16((const uint16_t *)samplerID.cached.clut, count, 0x8000) == CHECKALPHA_FULL; + onlyFull = (alphaSum & 0x8000) != 0; break; case GE_CMODE_16BIT_ABGR4444: - onlyFull = CheckAlpha16((const uint16_t *)samplerID.cached.clut, count, 0xF000) == CHECKALPHA_FULL; + onlyFull = (alphaSum & 0xF000) == 0xF000; break; case GE_CMODE_32BIT_ABGR8888: - onlyFull = CheckAlpha32((const uint32_t *)samplerID.cached.clut, count, 0xFF000000) == CHECKALPHA_FULL; + onlyFull = (alphaSum & 0xFF000000) == 0xFF000000; break; } + // Might just be different patterns, but if alphaSum != 0, it can't contain zero. + if (alphaSum != 0) + state->flags |= RasterizerStateFlags::CLUT_ALPHA_NON_ZERO; if (!onlyFull) state->flags |= RasterizerStateFlags::CLUT_ALPHA_NON_FULL; state->flags |= RasterizerStateFlags::CLUT_ALPHA_CHECKED; @@ -290,6 +300,37 @@ static RasterizerStateFlags DetectStateOptimizations(RasterizerState *state) { } } + if (alphaBlend && (needTextureAlpha || !alphaFull)) { + // Okay, we're blending, and we need to. Are we alpha testing? + GEComparison alphaTestFunc = pixelID.AlphaTestFunc(); + if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE) + alphaTestFunc = GE_COMP_NOTEQUAL; + if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT) + alphaTestFunc = GE_COMP_GREATER; + if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) + alphaTestFunc = GE_COMP_ALWAYS; + + PixelBlendFactor src = pixelID.AlphaBlendSrc(); + PixelBlendFactor dst = pixelID.AlphaBlendDst(); + if (state->flags & RasterizerStateFlags::OPTIMIZED_BLEND_SRC) + src = PixelBlendFactor::SRCALPHA; + if (state->flags & RasterizerStateFlags::OPTIMIZED_BLEND_DST) + dst = PixelBlendFactor::INVSRCALPHA; + + if (alphaTestFunc == GE_COMP_ALWAYS && src == PixelBlendFactor::SRCALPHA && dst == PixelBlendFactor::INVSRCALPHA) { + bool usesClut = (samplerID.texfmt & 4) != 0; + bool couldHaveZeroTexAlpha = true; + if (usesClut && CheckClutAlphaFull(state)) + couldHaveZeroTexAlpha = false; + if (state->flags & RasterizerStateFlags::CLUT_ALPHA_NON_ZERO) + couldHaveZeroTexAlpha = false; + + // Blending is expensive, since we read the target. Force alpha testing on. + if (!pixelID.depthWrite && !pixelID.stencilTest && couldHaveZeroTexAlpha) + optimize |= RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON; + } + } + bool applyFog = pixelID.applyFog || (state->flags & RasterizerStateFlags::OPTIMIZED_FOG_OFF); if (applyFog) { bool hasFog = state->flags & RasterizerStateFlags::VERTEX_HAS_FOG; @@ -319,10 +360,17 @@ static RasterizerStateFlags DetectStateOptimizations(RasterizerState *state) { // > 16, 8, or similar are also very common. if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT) alphaTestFunc = GE_COMP_GREATER; + if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) + alphaTestFunc = GE_COMP_ALWAYS; bool alphaTest = (alphaTestFunc == GE_COMP_NOTEQUAL || alphaTestFunc == GE_COMP_GREATER) && pixelID.alphaTestRef < 0xFF && !state->pixelID.hasAlphaTestMask; - if (alphaTest && CheckClutAlphaFull(state)) - optimize |= alphaTestFunc == GE_COMP_NOTEQUAL ? RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE : RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT; + if (alphaTest) { + bool canSkipAlphaTest = CheckClutAlphaFull(state); + if ((state->flags & RasterizerStateFlags::CLUT_ALPHA_NON_ZERO) && pixelID.alphaTestRef == 0) + canSkipAlphaTest = true; + if (canSkipAlphaTest) + optimize |= alphaTestFunc == GE_COMP_NOTEQUAL ? RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE : RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT; + } } } @@ -359,6 +407,13 @@ static bool ApplyStateOptimizations(RasterizerState *state, const RasterizerStat pixelID.alphaTestFunc = GE_COMP_NOTEQUAL; else if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT) pixelID.alphaTestFunc = GE_COMP_GREATER; + else if (optimize & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) { + pixelID.alphaTestFunc = GE_COMP_NOTEQUAL; + pixelID.alphaTestRef = 0; + pixelID.hasAlphaTestMask = false; + } else if (state->flags & RasterizerStateFlags::OPTIMIZED_ALPHATEST_ON) { + pixelID.alphaTestFunc = GE_COMP_ALWAYS; + } SingleFunc drawPixel = Rasterizer::GetSingleFunc(pixelID, nullptr); // Can't compile during runtime. This failing is a bit of a problem when undoing... @@ -1116,7 +1171,7 @@ void DrawRectangle(const VertexData &v0, const VertexData &v1, const BinCoords & std::string ztag = StringFromFormat("DisplayListRZ_%08x", state.listPC); #endif - for (int64_t curY = minY; curY <= maxY; curY += SCREEN_SCALE_FACTOR * 2, rowST += sty) { + for (int64_t curY = minY; curY < maxY; curY += SCREEN_SCALE_FACTOR * 2, rowST += sty) { DrawingCoords p = TransformUnit::ScreenToDrawing(minX, curY); int scissorY2 = curY + SCREEN_SCALE_FACTOR > maxY ? -1 : 0; @@ -1124,7 +1179,7 @@ void DrawRectangle(const VertexData &v0, const VertexData &v1, const BinCoords & Vec4 scissor_step = Vec4(0, -(SCREEN_SCALE_FACTOR * 2), 0, -(SCREEN_SCALE_FACTOR * 2)); Vec2f st = rowST; - for (int64_t curX = minX; curX <= maxX; curX += SCREEN_SCALE_FACTOR * 2, + for (int64_t curX = minX; curX < maxX; curX += SCREEN_SCALE_FACTOR * 2, st += stx, scissor_mask += scissor_step, p.x = (p.x + 2) & 0x3FF) { @@ -1292,7 +1347,8 @@ void ClearRectangle(const VertexData &v0, const VertexData &v1, const BinCoords minY += SCREEN_SCALE_FACTOR; const DrawingCoords pprime = TransformUnit::ScreenToDrawing(minX, minY); - const DrawingCoords pend = TransformUnit::ScreenToDrawing(maxX, maxY); + // Only include the end pixel when it's >= 0.5. + const DrawingCoords pend = TransformUnit::ScreenToDrawing(maxX - SCREEN_SCALE_FACTOR / 2, maxY - SCREEN_SCALE_FACTOR / 2); auto &pixelID = state.pixelID; auto &samplerID = state.samplerID; @@ -1641,10 +1697,14 @@ bool GetCurrentTexture(GPUDebugBuffer &buffer, int level) ComputeSamplerID(&id); id.cached.clut = clut; - Sampler::FetchFunc sampler = Sampler::GetFetchFunc(id, [] { - if (gpuDebug) - gpuDebug->DispatchFlush(); - }); + // Slight annoyance, we may have to force a compile. + Sampler::FetchFunc sampler = Sampler::GetFetchFunc(id, nullptr); + if (!sampler) { + Sampler::FlushJit(); + sampler = Sampler::GetFetchFunc(id, nullptr); + if (!sampler) + return false; + } u8 *texptr = Memory::GetPointerWrite(texaddr); u32 *row = (u32 *)buffer.GetData(); diff --git a/GPU/Software/Rasterizer.h b/GPU/Software/Rasterizer.h index d4386c4ba3..d4e4ebe17c 100644 --- a/GPU/Software/Rasterizer.h +++ b/GPU/Software/Rasterizer.h @@ -30,6 +30,7 @@ struct GPUDebugBuffer; struct BinCoords; +class BinManager; namespace Rasterizer { @@ -42,6 +43,7 @@ enum class RasterizerStateFlags { CLUT_ALPHA_CHECKED = 0x0010, CLUT_ALPHA_NON_FULL = 0x0020, + CLUT_ALPHA_NON_ZERO = 0x0040, VERTEX_FLAT_RESET = VERTEX_NON_FULL_WHITE | VERTEX_ALPHA_NON_FULL | VERTEX_ALPHA_NON_ZERO | VERTEX_HAS_FOG, @@ -53,9 +55,10 @@ enum class RasterizerStateFlags { OPTIMIZED_FOG_OFF = 0x0020'0000, OPTIMIZED_ALPHATEST_OFF_NE = 0x0040'0000, OPTIMIZED_ALPHATEST_OFF_GT = 0x0080'0000, + OPTIMIZED_ALPHATEST_ON = 0x0100'0000, // Anything that changes the actual pixel or sampler func. - OPTIMIZED_PIXELID = OPTIMIZED_BLEND_SRC | OPTIMIZED_BLEND_DST | OPTIMIZED_BLEND_OFF | OPTIMIZED_FOG_OFF | RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_NE | RasterizerStateFlags::OPTIMIZED_ALPHATEST_OFF_GT, + OPTIMIZED_PIXELID = OPTIMIZED_BLEND_SRC | OPTIMIZED_BLEND_DST | OPTIMIZED_BLEND_OFF | OPTIMIZED_FOG_OFF | OPTIMIZED_ALPHATEST_OFF_NE | OPTIMIZED_ALPHATEST_OFF_GT | OPTIMIZED_ALPHATEST_ON, OPTIMIZED_SAMPLERID = OPTIMIZED_TEXREPLACE, INVALID = 0x7FFFFFFF, @@ -98,7 +101,7 @@ struct RasterizerState { } }; -void ComputeRasterizerState(RasterizerState *state, std::function flushForCompile); +void ComputeRasterizerState(RasterizerState *state, BinManager *binner); void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0); void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0, const VertexData &v1, bool forceFlat); void CalculateRasterStateFlags(RasterizerState *state, const VertexData &v0, const VertexData &v1, const VertexData &v2); diff --git a/GPU/Software/RasterizerRectangle.cpp b/GPU/Software/RasterizerRectangle.cpp index a8713dad97..d7925a66a1 100644 --- a/GPU/Software/RasterizerRectangle.cpp +++ b/GPU/Software/RasterizerRectangle.cpp @@ -72,17 +72,59 @@ static uint32_t StandardAlphaBlend(uint32_t source, uint32_t dst) { } // Through mode, with the specific Darkstalker settings. -inline void DrawSinglePixel5551(u16 *pixel, const u32 color_in) { +template +static inline void DrawSinglePixel(u16 *pixel, const u32 color_in) { u32 new_color; // Because of this check, we only support src.a / 1-src.a blending. - if ((color_in >> 24) == 255) { + // We take advantage of short circuiting by checking the constant (template) value first. + if (!alphaBlend || (color_in >> 24) == 255) { new_color = color_in & 0xFFFFFF; } else { - const u32 old_color = RGBA5551ToRGBA8888(*pixel); + u32 old_color; + switch (fmt) { + case GE_FORMAT_565: + old_color = RGB565ToRGBA8888(*pixel); + break; + case GE_FORMAT_5551: + old_color = RGBA5551ToRGBA8888(*pixel); + break; + case GE_FORMAT_4444: + old_color = RGBA4444ToRGBA8888(*pixel); + break; + default: + break; + } + new_color = StandardAlphaBlend(color_in, old_color); } - new_color |= (*pixel & 0x8000) ? 0xff000000 : 0x00000000; - *pixel = RGBA8888ToRGBA5551(new_color); + + switch (fmt) { + case GE_FORMAT_565: + *pixel = RGBA8888ToRGB565(new_color); + break; + case GE_FORMAT_5551: + *pixel = RGBA8888ToRGBA555X(new_color) | (*pixel & 0x8000); + break; + case GE_FORMAT_4444: + *pixel = RGBA8888ToRGBA444X(new_color) | (*pixel & 0xF000); + break; + default: + break; + } +} + +template +static inline void DrawSinglePixel32(u32 *pixel, const u32 color_in) { + u32 new_color; + // Because of this check, we only support src.a / 1-src.a blending. + if ((color_in >> 24) == 255 || !alphaBlend) { + new_color = color_in & 0xFFFFFF; + } else { + const u32 old_color = *pixel; + new_color = StandardAlphaBlend(color_in, old_color); + } + new_color |= *pixel & 0xFF000000; + *pixel = new_color; } // Check if we can safely ignore the alpha test, assuming standard alpha blending. @@ -108,18 +150,18 @@ static inline bool AlphaTestIsNeedless(const PixelFuncID &pixelID) { return false; } -bool UseDrawSinglePixel5551(const PixelFuncID &pixelID) { +static bool UseDrawSinglePixel(const PixelFuncID &pixelID) { if (pixelID.clearMode || pixelID.colorTest || pixelID.stencilTest) return false; if (!AlphaTestIsNeedless(pixelID) || pixelID.DepthTestFunc() != GE_COMP_ALWAYS) return false; - if (pixelID.FBFormat() != GE_FORMAT_5551 || !pixelID.alphaBlend) - return false; // We skip blending when alpha = FF, so we can't allow other blend modes. - if (pixelID.AlphaBlendEq() != GE_BLENDMODE_MUL_AND_ADD || pixelID.AlphaBlendSrc() != PixelBlendFactor::SRCALPHA) - return false; - if (pixelID.AlphaBlendDst() != PixelBlendFactor::INVSRCALPHA) - return false; + if (pixelID.alphaBlend) { + if (pixelID.AlphaBlendEq() != GE_BLENDMODE_MUL_AND_ADD || pixelID.AlphaBlendSrc() != PixelBlendFactor::SRCALPHA) + return false; + if (pixelID.AlphaBlendDst() != PixelBlendFactor::INVSRCALPHA) + return false; + } if (pixelID.dithering || pixelID.applyLogicOp || pixelID.applyColorWriteMask) return false; @@ -156,6 +198,111 @@ static inline Vec4IntResult SOFTRAST_CALL ModulateRGBA(Vec4IntArg prim_in, Vec4I return ToVec4IntResult(out); } +template +static void DrawSpriteTex(const DrawingCoords &pos0, const DrawingCoords &pos1, int s_start, int t_start, int ds, int dt, u32 color0, const RasterizerState &state, Sampler::FetchFunc fetchFunc) { + const u8 *texptr = state.texptr[0]; + uint16_t texbufw = state.texbufw[0]; + + int t = t_start; + const Vec4 c0 = Vec4::FromRGBA(color0); + for (int y = pos0.y; y < pos1.y; y++) { + int s = s_start; + u16 *pixel16 = fb.Get16Ptr(pos0.x, y, state.pixelID.cached.framebufStride); + u32 *pixel32 = fb.Get32Ptr(pos0.x, y, state.pixelID.cached.framebufStride); + for (int x = pos0.x; x < pos1.x; x++) { + Vec4 tex_color = fetchFunc(s, t, texptr, texbufw, 0, state.samplerID); + if (isWhite) { + if (!alphaBlend || tex_color.a() != 0) { + u32 tex_color32 = tex_color.ToRGBA(); + if (fmt == GE_FORMAT_8888) + DrawSinglePixel32(pixel32, tex_color32); + else + DrawSinglePixel(pixel16, tex_color32); + } + } else { + Vec4 prim_color = c0; + prim_color = Vec4(ModulateRGBA(ToVec4IntArg(prim_color), ToVec4IntArg(tex_color), state.samplerID)); + if (!alphaBlend || prim_color.a() > 0) { + if (fmt == GE_FORMAT_8888) + DrawSinglePixel32(pixel32, prim_color.ToRGBA()); + else + DrawSinglePixel(pixel16, prim_color.ToRGBA()); + } + } + s += ds; + if (fmt == GE_FORMAT_8888) + pixel32++; + else + pixel16++; + } + t += dt; + } +} + +template +static void DrawSpriteTex(const DrawingCoords &pos0, const DrawingCoords &pos1, int s_start, int t_start, int ds, int dt, u32 color0, const RasterizerState &state, Sampler::FetchFunc fetchFunc) { + switch (state.pixelID.FBFormat()) { + case GE_FORMAT_565: + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc); + break; + case GE_FORMAT_5551: + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc); + break; + case GE_FORMAT_4444: + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc); + break; + case GE_FORMAT_8888: + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, color0, state, fetchFunc); + break; + default: + // Invalid, don't draw anything... + break; + } +} + +template +static void DrawSpriteNoTex(const DrawingCoords &pos0, const DrawingCoords &pos1, u32 color0, const RasterizerState &state) { + if (alphaBlend && Vec4::FromRGBA(color0).a() == 0) + return; + + for (int y = pos0.y; y < pos1.y; y++) { + if (fmt == GE_FORMAT_8888) { + u32 *pixel = fb.Get32Ptr(pos0.x, y, state.pixelID.cached.framebufStride); + for (int x = pos0.x; x < pos1.x; x++) { + DrawSinglePixel32(pixel, color0); + pixel++; + } + } else { + u16 *pixel = fb.Get16Ptr(pos0.x, y, state.pixelID.cached.framebufStride); + for (int x = pos0.x; x < pos1.x; x++) { + DrawSinglePixel(pixel, color0); + pixel++; + } + } + } +} + +template +static void DrawSpriteNoTex(const DrawingCoords &pos0, const DrawingCoords &pos1, u32 color0, const RasterizerState &state) { + switch (state.pixelID.FBFormat()) { + case GE_FORMAT_565: + DrawSpriteNoTex(pos0, pos1, color0, state); + break; + case GE_FORMAT_5551: + DrawSpriteNoTex(pos0, pos1, color0, state); + break; + case GE_FORMAT_4444: + DrawSpriteNoTex(pos0, pos1, color0, state); + break; + case GE_FORMAT_8888: + DrawSpriteNoTex(pos0, pos1, color0, state); + break; + default: + // Invalid, don't draw anything... + break; + } +} + void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &range, const RasterizerState &state) { const u8 *texptr = state.texptr[0]; @@ -211,40 +358,17 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran pos0.y = scissorTL.y; } - if (UseDrawSinglePixel5551(pixelID) && samplerID.TexFunc() == GE_TEXFUNC_MODULATE && samplerID.useTextureAlpha) { - if (isWhite) { - int t = t_start; - for (int y = pos0.y; y < pos1.y; y++) { - int s = s_start; - u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride); - for (int x = pos0.x; x < pos1.x; x++) { - u32 tex_color = Vec4(fetchFunc(s, t, texptr, texbufw, 0, state.samplerID)).ToRGBA(); - if (tex_color & 0xFF000000) { - DrawSinglePixel5551(pixel, tex_color); - } - s += ds; - pixel++; - } - t += dt; - } + if (UseDrawSinglePixel(pixelID) && (samplerID.TexFunc() == GE_TEXFUNC_MODULATE || samplerID.TexFunc() == GE_TEXFUNC_REPLACE) && samplerID.useTextureAlpha) { + if (isWhite || samplerID.TexFunc() == GE_TEXFUNC_REPLACE) { + if (pixelID.alphaBlend) + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc); + else + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc); } else { - int t = t_start; - const Vec4 c0 = Vec4::FromRGBA(v1.color0); - for (int y = pos0.y; y < pos1.y; y++) { - int s = s_start; - u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride); - for (int x = pos0.x; x < pos1.x; x++) { - Vec4 prim_color = c0; - Vec4 tex_color = fetchFunc(s, t, texptr, texbufw, 0, state.samplerID); - prim_color = Vec4(ModulateRGBA(ToVec4IntArg(prim_color), ToVec4IntArg(tex_color), state.samplerID)); - if (prim_color.a() > 0) { - DrawSinglePixel5551(pixel, prim_color.ToRGBA()); - } - s += ds; - pixel++; - } - t += dt; - } + if (pixelID.alphaBlend) + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc); + else + DrawSpriteTex(pos0, pos1, s_start, t_start, ds, dt, v1.color0, state, fetchFunc); } } else { float dsf = ds * (1.0f / (float)(1 << state.samplerID.width0Shift)); @@ -286,17 +410,11 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran if (pos1.y > scissorBR.y) pos1.y = scissorBR.y + 1; if (pos0.x < scissorTL.x) pos0.x = scissorTL.x; if (pos0.y < scissorTL.y) pos0.y = scissorTL.y; - if (UseDrawSinglePixel5551(pixelID)) { - if (Vec4::FromRGBA(v1.color0).a() == 0) - return; - - for (int y = pos0.y; y < pos1.y; y++) { - u16 *pixel = fb.Get16Ptr(pos0.x, y, pixelID.cached.framebufStride); - for (int x = pos0.x; x < pos1.x; x++) { - DrawSinglePixel5551(pixel, v1.color0); - pixel++; - } - } + if (UseDrawSinglePixel(pixelID)) { + if (pixelID.alphaBlend) + DrawSpriteNoTex(pos0, pos1, v1.color0, state); + else + DrawSpriteNoTex(pos0, pos1, v1.color0, state); } else if (pixelID.earlyZChecks) { const Vec4 prim_color = Vec4::FromRGBA(v1.color0); for (int y = pos0.y; y < pos1.y; y++) { @@ -319,12 +437,14 @@ void DrawSprite(const VertexData &v0, const VertexData &v1, const BinCoords &ran #if defined(SOFTGPU_MEMORY_TAGGING_BASIC) || defined(SOFTGPU_MEMORY_TAGGING_DETAILED) uint32_t bpp = pixelID.FBFormat() == GE_FORMAT_8888 ? 4 : 2; - std::string tag = StringFromFormat("DisplayListR_%08x", state.listPC); - std::string ztag = StringFromFormat("DisplayListRZ_%08x", state.listPC); + char tag[64]{}; + // char ztag[64]{}; + int tagLen = snprintf(tag, sizeof(tag), "DisplayListR_%08x", state.listPC); + // int ztagLen = snprintf(ztag, sizeof(ztag), "DisplayListRZ_%08x", state.listPC); for (int y = pos0.y; y < pos1.y; y++) { uint32_t row = gstate.getFrameBufAddress() + y * pixelID.cached.framebufStride * bpp; - NotifyMemInfo(MemBlockFlags::WRITE, row + pos0.x * bpp, (pos1.x - pos0.x) * bpp, tag.c_str(), tag.size()); + NotifyMemInfo(MemBlockFlags::WRITE, row + pos0.x * bpp, (pos1.x - pos0.x) * bpp, tag, tagLen); } #endif } @@ -344,24 +464,6 @@ bool RectangleFastPath(const VertexData &v0, const VertexData &v1, BinManager &b const RasterizerState &state = binner.State(); g_DarkStalkerStretch = DSStretch::Off; - // Check for 1:1 texture mapping. In that case we can call DrawSprite. - int xdiff = v1.screenpos.x - v0.screenpos.x; - int ydiff = v1.screenpos.y - v0.screenpos.y; - int udiff = (v1.texturecoords.x - v0.texturecoords.x) * (float)SCREEN_SCALE_FACTOR; - int vdiff = (v1.texturecoords.y - v0.texturecoords.y) * (float)SCREEN_SCALE_FACTOR; - bool coord_check = - (xdiff == udiff || xdiff == -udiff) && - (ydiff == vdiff || ydiff == -vdiff); - // Currently only works for TL/BR, which is the most common but not required. - bool orient_check = xdiff >= 0 && ydiff >= 0; - // We already have a fast path for clear in ClearRectangle. - bool state_check = state.throughMode && !state.pixelID.clearMode && !state.samplerID.hasAnyMips && NoClampOrWrap(state, v0.texturecoords.uv()) && NoClampOrWrap(state, v1.texturecoords.uv()); - // This doesn't work well with offset drawing, see #15876. Through never has a subpixel offset. - bool subpixel_check = ((v0.screenpos.x | v0.screenpos.y | v1.screenpos.x | v1.screenpos.y) & 0xF) == 0; - if ((coord_check || !state.enableTextures) && orient_check && state_check && subpixel_check) { - binner.AddSprite(v0, v1); - return true; - } // Eliminate the stretch blit in DarkStalkers. // We compensate for that when blitting the framebuffer in SoftGpu.cpp. @@ -389,9 +491,44 @@ bool RectangleFastPath(const VertexData &v0, const VertexData &v1, BinManager &b g_needsClearAfterDialog = true; } } + + // Check for 1:1 texture mapping. In that case we can call DrawSprite. + int xdiff = v1.screenpos.x - v0.screenpos.x; + int ydiff = v1.screenpos.y - v0.screenpos.y; + int udiff = (v1.texturecoords.x - v0.texturecoords.x) * (float)SCREEN_SCALE_FACTOR; + int vdiff = (v1.texturecoords.y - v0.texturecoords.y) * (float)SCREEN_SCALE_FACTOR; + + // Currently only works for TL/BR, which is the most common but not required. + bool orient_check = xdiff >= 0 && ydiff >= 0; + // We already have a fast path for clear in ClearRectangle. + bool state_check = state.throughMode && !state.pixelID.clearMode && !state.samplerID.hasAnyMips && !state.textureProj; + bool coord_check = true; + if (state.enableTextures) { + state_check = state_check && NoClampOrWrap(state, v0.texturecoords.uv()) && NoClampOrWrap(state, v1.texturecoords.uv()); + coord_check = (xdiff == udiff || xdiff == -udiff) && (ydiff == vdiff || ydiff == -vdiff); + } + // This doesn't work well with offset drawing, see #15876. Through never has a subpixel offset. + bool subpixel_check = ((v0.screenpos.x | v0.screenpos.y | v1.screenpos.x | v1.screenpos.y) & 0xF) == 0; + if (coord_check && orient_check && state_check && subpixel_check) { + binner.AddSprite(v0, v1); + return true; + } return false; } +static bool IsCoordRectangleCompatible(const RasterizerState &state, const ClipVertexData &data) { + if (!state.throughMode) { + // See AreCoordsRectangleCompatible() for most of these, this just checks the main vert. + if (data.OutsideRange()) + return false; + if (data.clippos.w < 0.0f) + return false; + if (data.clippos.z < -data.clippos.w) + return false; + } + return true; +} + static bool AreCoordsRectangleCompatible(const RasterizerState &state, const ClipVertexData &data0, const ClipVertexData &data1) { if (data1.v.color0 != data0.v.color0) return false; @@ -404,7 +541,7 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli if (data1.v.color1 != data0.v.color1) return false; // This means it should be culled, outside range. - if (data1.OutsideRange() || data0.OutsideRange()) + if (data1.OutsideRange()) return false; // Do we have to think about perspective correction or slope mip level? if (state.enableTextures && data1.clippos.w != data0.clippos.w) { @@ -413,6 +550,12 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli if (data1.clippos.w - halftexel > data0.clippos.w || data1.clippos.w + halftexel < data0.clippos.w) return false; } + // We might need to cull this if all verts have negative w, which doesn't seem to happen for rectangles. + if (data1.clippos.w < 0.0f) + return false; + // And we also may need to clip, even if flat. + if (data1.clippos.z < -data1.clippos.w) + return false; // If we're projecting textures, only allow an exact match for simplicity. if (state.enableTextures && data1.v.texturecoords.q() != data0.v.texturecoords.q()) return false; @@ -427,10 +570,13 @@ static bool AreCoordsRectangleCompatible(const RasterizerState &state, const Cli } bool DetectRectangleFromStrip(const RasterizerState &state, const ClipVertexData data[4], int *tlIndex, int *brIndex) { + if (!IsCoordRectangleCompatible(state, data[0])) + return false; + // Color and Z must be flat. Also find the TL and BR meanwhile. int tl = 0, br = 0; for (int i = 1; i < 4; ++i) { - if (!AreCoordsRectangleCompatible(state, data[i], data[0])) + if (!AreCoordsRectangleCompatible(state, data[0], data[i])) return false; if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y) @@ -483,10 +629,13 @@ bool DetectRectangleFromStrip(const RasterizerState &state, const ClipVertexData } bool DetectRectangleFromFan(const RasterizerState &state, const ClipVertexData *data, int *tlIndex, int *brIndex) { + if (!IsCoordRectangleCompatible(state, data[0])) + return false; + // Color and Z must be flat. int tl = 0, br = 0; for (int i = 1; i < 4; ++i) { - if (!AreCoordsRectangleCompatible(state, data[i], data[0])) + if (!AreCoordsRectangleCompatible(state, data[0], data[i])) return false; if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y) @@ -534,10 +683,13 @@ bool DetectRectangleFromFan(const RasterizerState &state, const ClipVertexData * } bool DetectRectangleFromPair(const RasterizerState &state, const ClipVertexData data[6], int *tlIndex, int *brIndex) { + if (!IsCoordRectangleCompatible(state, data[0])) + return false; + // Color and Z must be flat. Also find the TL and BR meanwhile. int tl = 0, br = 0; for (int i = 1; i < 6; ++i) { - if (!AreCoordsRectangleCompatible(state, data[i], data[0])) + if (!AreCoordsRectangleCompatible(state, data[0], data[i])) return false; if (data[i].v.screenpos.x <= data[tl].v.screenpos.x && data[i].v.screenpos.y <= data[tl].v.screenpos.y) diff --git a/GPU/Software/Sampler.cpp b/GPU/Software/Sampler.cpp index 66022fa53b..c748260dd4 100644 --- a/GPU/Software/Sampler.cpp +++ b/GPU/Software/Sampler.cpp @@ -25,6 +25,7 @@ #include "Core/Reporting.h" #include "GPU/Common/TextureDecoder.h" #include "GPU/GPUState.h" +#include "GPU/Software/BinManager.h" #include "GPU/Software/Rasterizer.h" #include "GPU/Software/RasterizerRegCache.h" #include "GPU/Software/Sampler.h" @@ -67,9 +68,9 @@ bool DescribeCodePtr(const u8 *ptr, std::string &name) { return true; } -NearestFunc GetNearestFunc(SamplerID id, std::function flushForCompile) { +NearestFunc GetNearestFunc(SamplerID id, BinManager *binner) { id.linear = false; - NearestFunc jitted = jitCache->GetNearest(id, flushForCompile); + NearestFunc jitted = jitCache->GetNearest(id, binner); if (jitted) { return jitted; } @@ -77,9 +78,9 @@ NearestFunc GetNearestFunc(SamplerID id, std::function flushForCompile) return &SampleNearest; } -LinearFunc GetLinearFunc(SamplerID id, std::function flushForCompile) { +LinearFunc GetLinearFunc(SamplerID id, BinManager *binner) { id.linear = true; - LinearFunc jitted = jitCache->GetLinear(id, flushForCompile); + LinearFunc jitted = jitCache->GetLinear(id, binner); if (jitted) { return jitted; } @@ -87,9 +88,9 @@ LinearFunc GetLinearFunc(SamplerID id, std::function flushForCompile) { return &SampleLinear; } -FetchFunc GetFetchFunc(SamplerID id, std::function flushForCompile) { +FetchFunc GetFetchFunc(SamplerID id, BinManager *binner) { id.fetch = true; - FetchFunc jitted = jitCache->GetFetch(id, flushForCompile); + FetchFunc jitted = jitCache->GetFetch(id, binner); if (jitted) { return jitted; } @@ -97,11 +98,19 @@ FetchFunc GetFetchFunc(SamplerID id, std::function flushForCompile) { return &SampleFetch; } +thread_local SamplerJitCache::LastCache SamplerJitCache::lastFetch_; +thread_local SamplerJitCache::LastCache SamplerJitCache::lastNearest_; +thread_local SamplerJitCache::LastCache SamplerJitCache::lastLinear_; + // 256k should be enough. SamplerJitCache::SamplerJitCache() : Rasterizer::CodeBlock(1024 * 64 * 4), cache_(64) { + lastFetch_.gen = -1; + lastNearest_.gen = -1; + lastLinear_.gen = -1; } void SamplerJitCache::Clear() { + clearGen_++; CodeBlock::Clear(); cache_.Clear(); addresses_.clear(); @@ -153,25 +162,20 @@ void SamplerJitCache::Flush() { compileQueue_.clear(); } -NearestFunc SamplerJitCache::GetByID(const SamplerID &id, std::function flushForCompile) { - if (!g_Config.bSoftwareRenderingJit) - return nullptr; - +NearestFunc SamplerJitCache::GetByID(const SamplerID &id, size_t key, BinManager *binner) { std::unique_lock guard(jitCacheLock); - const size_t key = std::hash()(id); - auto it = cache_.Get(key); if (it != nullptr) return it; - if (!flushForCompile) { + if (!binner) { // Can't compile, let's try to do it later when there's an opportunity. compileQueue_.insert(id); return nullptr; } guard.unlock(); - flushForCompile(); + binner->Flush("compile"); guard.lock(); for (const auto &queued : compileQueue_) { @@ -189,16 +193,43 @@ NearestFunc SamplerJitCache::GetByID(const SamplerID &id, std::function return cache_.Get(key); } -NearestFunc SamplerJitCache::GetNearest(const SamplerID &id, std::function flushForCompile) { - return (NearestFunc)GetByID(id, flushForCompile); +NearestFunc SamplerJitCache::GetNearest(const SamplerID &id, BinManager *binner) { + if (!g_Config.bSoftwareRenderingJit) + return nullptr; + + const size_t key = std::hash()(id); + if (lastNearest_.Match(key, clearGen_)) + return (NearestFunc)lastNearest_.func; + + auto func = GetByID(id, key, binner); + lastNearest_.Set(key, func, clearGen_); + return (NearestFunc)func; } -LinearFunc SamplerJitCache::GetLinear(const SamplerID &id, std::function flushForCompile) { - return (LinearFunc)GetByID(id, flushForCompile); +LinearFunc SamplerJitCache::GetLinear(const SamplerID &id, BinManager *binner) { + if (!g_Config.bSoftwareRenderingJit) + return nullptr; + + const size_t key = std::hash()(id); + if (lastLinear_.Match(key, clearGen_)) + return (LinearFunc)lastLinear_.func; + + auto func = GetByID(id, key, binner); + lastLinear_.Set(key, func, clearGen_); + return (LinearFunc)func; } -FetchFunc SamplerJitCache::GetFetch(const SamplerID &id, std::function flushForCompile) { - return (FetchFunc)GetByID(id, flushForCompile); +FetchFunc SamplerJitCache::GetFetch(const SamplerID &id, BinManager *binner) { + if (!g_Config.bSoftwareRenderingJit) + return nullptr; + + const size_t key = std::hash()(id); + if (lastFetch_.Match(key, clearGen_)) + return (FetchFunc)lastFetch_.func; + + auto func = GetByID(id, key, binner); + lastFetch_.Set(key, func, clearGen_); + return (FetchFunc)func; } void SamplerJitCache::Compile(const SamplerID &id) { diff --git a/GPU/Software/Sampler.h b/GPU/Software/Sampler.h index 0d14ae12d2..fbe606b110 100644 --- a/GPU/Software/Sampler.h +++ b/GPU/Software/Sampler.h @@ -19,7 +19,6 @@ #include "ppsspp_config.h" -#include #include #include #include "Common/Data/Collections/Hashmaps.h" @@ -27,6 +26,8 @@ #include "GPU/Software/FuncId.h" #include "GPU/Software/RasterizerRegCache.h" +class BinManager; + namespace Sampler { // Our std::unordered_map argument will ignore the alignment attribute, but that doesn't matter. @@ -37,13 +38,13 @@ namespace Sampler { #endif typedef Rasterizer::Vec4IntResult(SOFTRAST_CALL *FetchFunc)(int u, int v, const u8 *tptr, int bufw, int level, const SamplerID &samplerID); -FetchFunc GetFetchFunc(SamplerID id, std::function flushForCompile); +FetchFunc GetFetchFunc(SamplerID id, BinManager *binner); typedef Rasterizer::Vec4IntResult (SOFTRAST_CALL *NearestFunc)(float s, float t, Rasterizer::Vec4IntArg prim_color, const u8 *const *tptr, const uint16_t *bufw, int level, int levelFrac, const SamplerID &samplerID); -NearestFunc GetNearestFunc(SamplerID id, std::function flushForCompile); +NearestFunc GetNearestFunc(SamplerID id, BinManager *binner); typedef Rasterizer::Vec4IntResult (SOFTRAST_CALL *LinearFunc)(float s, float t, Rasterizer::Vec4IntArg prim_color, const u8 *const *tptr, const uint16_t *bufw, int level, int levelFrac, const SamplerID &samplerID); -LinearFunc GetLinearFunc(SamplerID id, std::function flushForCompile); +LinearFunc GetLinearFunc(SamplerID id, BinManager *binner); void Init(); void FlushJit(); @@ -56,9 +57,9 @@ public: SamplerJitCache(); // Returns a pointer to the code to run. - NearestFunc GetNearest(const SamplerID &id, std::function flushForCompile); - LinearFunc GetLinear(const SamplerID &id, std::function flushForCompile); - FetchFunc GetFetch(const SamplerID &id, std::function flushForCompile); + NearestFunc GetNearest(const SamplerID &id, BinManager *binner); + LinearFunc GetLinear(const SamplerID &id, BinManager *binner); + FetchFunc GetFetch(const SamplerID &id, BinManager *binner); void Clear() override; void Flush(); @@ -66,7 +67,7 @@ public: private: void Compile(const SamplerID &id); - NearestFunc GetByID(const SamplerID &id, std::function flushForCompile); + NearestFunc GetByID(const SamplerID &id, size_t key, BinManager *binner); FetchFunc CompileFetch(const SamplerID &id); NearestFunc CompileNearest(const SamplerID &id); LinearFunc CompileLinear(const SamplerID &id); @@ -127,9 +128,29 @@ private: const u8 *const5551Swizzle_ = nullptr; const u8 *const5650Swizzle_ = nullptr; + struct LastCache { + size_t key; + NearestFunc func; + int gen = -1; + + bool Match(size_t k, int g) const { + return key == k && gen == g; + } + + void Set(size_t k, NearestFunc f, int g) { + key = k; + func = f; + gen = g; + } + }; + DenseHashMap cache_; std::unordered_map addresses_; std::unordered_set compileQueue_; + int clearGen_ = 0; + static thread_local LastCache lastFetch_; + static thread_local LastCache lastNearest_; + static thread_local LastCache lastLinear_; }; #if defined(__clang__) || defined(__GNUC__) diff --git a/GPU/Software/TransformUnit.cpp b/GPU/Software/TransformUnit.cpp index 53d2cb12c1..b7c9401219 100644 --- a/GPU/Software/TransformUnit.cpp +++ b/GPU/Software/TransformUnit.cpp @@ -569,10 +569,9 @@ void TransformUnit::SubmitPrimitive(const void* vertices, const void* indices, G // Some games send rectangles as a series of regular triangles. // We look for this, but only in throughmode. ClipVertexData buf[6]; - int buf_index = data_index_; - for (int i = 0; i < data_index_; ++i) { - buf[i] = data_[i]; - } + // Could start at data_index_ and copy to buf, but there's little reason. + int buf_index = 0; + _assert_(data_index_ == 0); for (int vtx = 0; vtx < vertex_count; ++vtx) { buf[buf_index++] = vreader.Read(vtx); diff --git a/UI/DisplayLayoutScreen.cpp b/UI/DisplayLayoutScreen.cpp index 34a4d3d3f4..432e3b5eaa 100644 --- a/UI/DisplayLayoutScreen.cpp +++ b/UI/DisplayLayoutScreen.cpp @@ -23,6 +23,7 @@ #include "Common/Render/DrawBuffer.h" #include "Common/UI/Context.h" #include "Common/UI/View.h" +#include "Common/UI/UIScreen.h" #include "Common/Math/math_util.h" #include "Common/System/Display.h" #include "Common/System/NativeApp.h" @@ -37,14 +38,14 @@ #include "Core/System.h" #include "GPU/Common/FramebufferManagerCommon.h" #include "GPU/Common/PresentationCommon.h" -#include "GPU/Common/PostShader.h" static const int leftColumnWidth = 200; static const float orgRatio = 1.764706f; // 480.0 / 272.0 enum Mode { - MODE_MOVE, - MODE_RESIZE, + MODE_INACTIVE = 0, + MODE_MOVE = 1, + MODE_RESIZE = 2, }; static Bounds FRectToBounds(FRect rc) { @@ -149,6 +150,7 @@ void DisplayLayoutScreen::dialogFinished(const Screen *dialog, DialogResult resu } UI::EventReturn DisplayLayoutScreen::OnPostProcShaderChange(UI::EventParams &e) { + // Remove the virtual "Off" entry. TODO: Get rid of it generally. g_Config.vPostShaderNames.erase(std::remove(g_Config.vPostShaderNames.begin(), g_Config.vPostShaderNames.end(), "Off"), g_Config.vPostShaderNames.end()); NativeMessageReceived("gpu_configChanged", ""); @@ -162,7 +164,13 @@ UI::EventReturn DisplayLayoutScreen::OnPostProcShaderChange(UI::EventParams &e) } static std::string PostShaderTranslateName(const char *value) { + auto gr = GetI18NCategory("Graphics"); auto ps = GetI18NCategory("PostShaders"); + if (!strcmp(value, "Off")) { + // Off is a legacy fake item (gonna migrate off it later). + return gr->T("Add postprocessing shader"); + } + const ShaderInfo *info = GetPostShaderInfo(value); if (info) { return ps->T(value, info ? info->name.c_str() : value); @@ -195,14 +203,16 @@ void DisplayLayoutScreen::CreateViews() { // impossible. root_->SetExclusiveTouch(true); - ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, 10.f, 10.f, NONE, 10.f, false)); + ScrollView *leftScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(400.0f, FILL_PARENT, 10.f, 10.f, NONE, 10.f, false)); ViewGroup *leftColumn = new LinearLayout(ORIENT_VERTICAL); leftScrollView->Add(leftColumn); + leftScrollView->SetClickableBackground(true); root_->Add(leftScrollView); ScrollView *rightScrollView = new ScrollView(ORIENT_VERTICAL, new AnchorLayoutParams(300.0f, FILL_PARENT, NONE, 10.f, 10.f, 10.f, false)); ViewGroup *rightColumn = new LinearLayout(ORIENT_VERTICAL); rightScrollView->Add(rightColumn); + rightScrollView->SetClickableBackground(true); root_->Add(rightScrollView); LinearLayout *bottomControls = new LinearLayout(ORIENT_HORIZONTAL, new AnchorLayoutParams(NONE, NONE, NONE, 10.0f, false)); @@ -219,6 +229,7 @@ void DisplayLayoutScreen::CreateViews() { aspectRatio->SetLiveUpdate(true); mode_ = new ChoiceStrip(ORIENT_HORIZONTAL, new LinearLayoutParams(WRAP_CONTENT, WRAP_CONTENT)); + mode_->AddChoice(di->T("Inactive")); mode_->AddChoice(di->T("Move")); mode_->AddChoice(di->T("Resize")); mode_->SetSelection(0, false); @@ -251,8 +262,6 @@ void DisplayLayoutScreen::CreateViews() { static const char *bufFilters[] = { "Linear", "Nearest", }; leftColumn->Add(new PopupMultiChoice(&g_Config.iBufFilter, gr->T("Screen Scaling Filter"), bufFilters, 1, ARRAY_SIZE(bufFilters), gr->GetName(), screenManager())); - leftColumn->Add(new ItemHeader(gr->T("Postprocessing effect"))); - Draw::DrawContext *draw = screenManager()->getDrawContext(); bool multiViewSupported = draw->GetDeviceCaps().multiViewSupported; @@ -261,15 +270,33 @@ void DisplayLayoutScreen::CreateViews() { return g_Config.bStereoRendering && multiViewSupported; }; + leftColumn->Add(new ItemHeader(gr->T("Postprocessing shaders"))); + std::set alreadyAddedShader; + settingsVisible_.resize(g_Config.vPostShaderNames.size()); + + static ContextMenuItem postShaderContextMenu[] = { + { "Move Up", "I_ARROW_UP" }, + { "Move Down", "I_ARROW_DOWN" }, + { "Remove", "I_TRASHCAN" }, + }; + for (int i = 0; i < (int)g_Config.vPostShaderNames.size() + 1 && i < ARRAY_SIZE(shaderNames_); ++i) { // Vector element pointer get invalidated on resize, cache name to have always a valid reference in the rendering thread shaderNames_[i] = i == g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[i]; - leftColumn->Add(new ItemHeader(StringFromFormat("%s #%d", gr->T("Postprocessing Shader"), i + 1))); - postProcChoice_ = leftColumn->Add(new ChoiceWithValueDisplay(&shaderNames_[i], "", &PostShaderTranslateName)); + + LinearLayout *shaderRow = new LinearLayout(ORIENT_HORIZONTAL, new LinearLayoutParams(UI::FILL_PARENT, UI::WRAP_CONTENT)); + shaderRow->SetSpacing(4.0f); + leftColumn->Add(shaderRow); + + if (shaderNames_[i] != "Off") { + postProcChoice_ = shaderRow->Add(new ChoiceWithValueDisplay(&shaderNames_[i], "", &PostShaderTranslateName, new LinearLayoutParams(1.0f))); + } else { + postProcChoice_ = shaderRow->Add(new Choice(ImageID("I_PLUS"))); + } postProcChoice_->OnClick.Add([=](EventParams &e) { auto gr = GetI18NCategory("Graphics"); - auto procScreen = new PostProcScreen(gr->T("Postprocessing Shader"), i, false); + auto procScreen = new PostProcScreen(gr->T("Postprocessing shaders"), i, false); procScreen->SetHasDropShadow(false); procScreen->OnChoice.Handle(this, &DisplayLayoutScreen::OnPostProcShaderChange); if (e.v) @@ -281,25 +308,90 @@ void DisplayLayoutScreen::CreateViews() { return !g_Config.bSkipBufferEffects && !enableStereo(); }); + if (i < g_Config.vPostShaderNames.size()) { + bool hasSettings = false; + std::vector shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]); + for (auto shaderInfo : shaderChain) { + for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) { + auto &setting = shaderInfo->settings[i]; + if (!setting.name.empty()) { + hasSettings = true; + break; + } + } + } + if (hasSettings) { + CheckBox *checkBox = new CheckBox(&settingsVisible_[i], ImageID("I_SLIDERS"), new LinearLayoutParams(0.0f)); + auto settingsButton = shaderRow->Add(checkBox); + settingsButton->OnClick.Add([=](EventParams &e) { + RecreateViews(); + return UI::EVENT_DONE; + }); + } + + auto removeButton = shaderRow->Add(new Choice(ImageID("I_TRASHCAN"), new LinearLayoutParams(0.0f))); + removeButton->OnClick.Add([=](EventParams &e) -> UI::EventReturn { + g_Config.vPostShaderNames.erase(g_Config.vPostShaderNames.begin() + i); + NativeMessageReceived("gpu_configChanged", ""); + RecreateViews(); + return UI::EVENT_DONE; + }); + + auto moreButton = shaderRow->Add(new Choice(ImageID("I_THREE_DOTS"), new LinearLayoutParams(0.0f))); + moreButton->OnClick.Add([=](EventParams &e) -> UI::EventReturn { + PopupContextMenuScreen *contextMenu = new UI::PopupContextMenuScreen(postShaderContextMenu, ARRAY_SIZE(postShaderContextMenu), di.get(), moreButton); + screenManager()->push(contextMenu); + contextMenu->SetEnabled(0, i > 0); + contextMenu->SetEnabled(1, i < g_Config.vPostShaderNames.size() - 1); + contextMenu->OnChoice.Add([=](EventParams &e) -> UI::EventReturn { + switch (e.a) { + case 0: // Move up + std::swap(g_Config.vPostShaderNames[i - 1], g_Config.vPostShaderNames[i]); + break; + case 1: // Move down + std::swap(g_Config.vPostShaderNames[i], g_Config.vPostShaderNames[i + 1]); + break; + case 2: // Remove + g_Config.vPostShaderNames.erase(g_Config.vPostShaderNames.begin() + i); + break; + default: + return UI::EVENT_DONE; + } + NativeMessageReceived("gpu_configChanged", ""); + RecreateViews(); + return UI::EVENT_DONE; + }); + return UI::EVENT_DONE; + }); + } + + // No need for settings on the last one. if (i == g_Config.vPostShaderNames.size()) continue; - auto shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]); + if (!settingsVisible_[i]) + continue; + + std::vector shaderChain = GetPostShaderChain(g_Config.vPostShaderNames[i]); for (auto shaderInfo : shaderChain) { // Disable duplicated shader slider bool duplicated = alreadyAddedShader.find(shaderInfo->section) != alreadyAddedShader.end(); alreadyAddedShader.insert(shaderInfo->section); + + LinearLayout *settingContainer = new LinearLayout(ORIENT_VERTICAL, new LinearLayoutParams(UI::FILL_PARENT, UI::WRAP_CONTENT, UI::Margins(24.0f, 0.0f, 0.0f, 0.0f))); + leftColumn->Add(settingContainer); for (size_t i = 0; i < ARRAY_SIZE(shaderInfo->settings); ++i) { auto &setting = shaderInfo->settings[i]; if (!setting.name.empty()) { + // This map lookup will create the setting in the mPostShaderSetting map if it doesn't exist, with a default value of 0.0. auto &value = g_Config.mPostShaderSetting[StringFromFormat("%sSettingValue%d", shaderInfo->section.c_str(), i + 1)]; if (duplicated) { auto sliderName = StringFromFormat("%s %s", ps->T(setting.name), ps->T("(duplicated setting, previous slider will be used)")); - PopupSliderChoiceFloat *settingValue = leftColumn->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, sliderName, setting.step, screenManager())); + PopupSliderChoiceFloat *settingValue = settingContainer->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, sliderName, setting.step, screenManager())); settingValue->SetEnabled(false); } else { - PopupSliderChoiceFloat *settingValue = leftColumn->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, ps->T(setting.name), setting.step, screenManager())); + PopupSliderChoiceFloat *settingValue = settingContainer->Add(new PopupSliderChoiceFloat(&value, setting.minValue, setting.maxValue, ps->T(setting.name), setting.step, screenManager())); settingValue->SetLiveUpdate(true); settingValue->SetHasDropShadow(false); settingValue->SetEnabledFunc([=] { @@ -313,3 +405,49 @@ void DisplayLayoutScreen::CreateViews() { root_->Add(new DisplayLayoutBackground(mode_, new AnchorLayoutParams(FILL_PARENT, FILL_PARENT, 0.0f, 0.0f, 0.0f, 0.0f))); } + +void PostProcScreen::CreateViews() { + auto ps = GetI18NCategory("PostShaders"); + ReloadAllPostShaderInfo(screenManager()->getDrawContext()); + shaders_ = GetAllPostShaderInfo(); + std::vector items; + int selected = -1; + const std::string selectedName = id_ >= (int)g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[id_]; + + for (int i = 0; i < (int)shaders_.size(); i++) { + if (!shaders_[i].visible) + continue; + if (shaders_[i].isStereo != showStereoShaders_) + continue; + if (shaders_[i].section == selectedName) + selected = (int)indexTranslation_.size(); + items.push_back(ps->T(shaders_[i].section.c_str(), shaders_[i].name.c_str())); + indexTranslation_.push_back(i); + } + adaptor_ = UI::StringVectorListAdaptor(items, selected); + ListPopupScreen::CreateViews(); +} + +void PostProcScreen::OnCompleted(DialogResult result) { + if (result != DR_OK) + return; + const std::string &value = shaders_[indexTranslation_[listView_->GetSelected()]].section; + // I feel this logic belongs more in the caller, but eh... + if (showStereoShaders_) { + if (g_Config.sStereoToMonoShader != value) { + g_Config.sStereoToMonoShader = value; + NativeMessageReceived("gpu_configChanged", ""); + } + } else { + if (id_ < (int)g_Config.vPostShaderNames.size()) { + if (g_Config.vPostShaderNames[id_] != value) { + g_Config.vPostShaderNames[id_] = value; + NativeMessageReceived("gpu_configChanged", ""); + } + } + else { + g_Config.vPostShaderNames.push_back(value); + NativeMessageReceived("gpu_configChanged", ""); + } + } +} diff --git a/UI/DisplayLayoutScreen.h b/UI/DisplayLayoutScreen.h index 690bbfde55..a494b9d288 100644 --- a/UI/DisplayLayoutScreen.h +++ b/UI/DisplayLayoutScreen.h @@ -17,8 +17,12 @@ #pragma once +#include + #include "Common/UI/View.h" #include "Common/UI/ViewGroup.h" +#include "GPU/Common/PostShader.h" + #include "MiscScreens.h" class DisplayLayoutScreen : public UIDialogScreenWithGameBackground { @@ -45,4 +49,23 @@ private: UI::ChoiceStrip *mode_ = nullptr; UI::Choice *postProcChoice_ = nullptr; std::string shaderNames_[256]; + std::deque settingsVisible_; // vector is an insane bitpacked specialization! +}; + +class PostProcScreen : public ListPopupScreen { +public: + PostProcScreen(const std::string &title, int id, bool showStereoShaders) + : ListPopupScreen(title), id_(id), showStereoShaders_(showStereoShaders) { } + + void CreateViews() override; + + const char *tag() const override { return "PostProc"; } + +private: + void OnCompleted(DialogResult result) override; + bool ShowButtons() const override { return true; } + std::vector shaders_; + int id_; + bool showStereoShaders_; + std::vector indexTranslation_; }; diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index d64a42d5d0..15d1987f02 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -846,7 +846,30 @@ void GameSettingsScreen::CreateViews() { LinearLayout *systemSettings = AddTab("GameSettingsSystem", ms->T("System")); systemSettings->Add(new ItemHeader(sy->T("UI"))); - systemSettings->Add(new Choice(sy->T("Language")))->OnClick.Handle(this, &GameSettingsScreen::OnLanguage); + + auto langCodeToName = [](const char *value) -> std::string { + auto &mapping = g_Config.GetLangValuesMapping(); + auto iter = mapping.find(value); + if (iter != mapping.end()) { + return iter->second.first; + } + return value; + }; + + systemSettings->Add(new ChoiceWithValueDisplay(&g_Config.sLanguageIni, sy->T("Language"), langCodeToName))->OnClick.Add([&](UI::EventParams &e) { + auto sy = GetI18NCategory("System"); + auto langScreen = new NewLanguageScreen(sy->T("Language")); + langScreen->OnChoice.Add([&](UI::EventParams &e) { + screenManager()->RecreateAllViews(); + if (host) + host->UpdateUI(); + return UI::EVENT_DONE; + }); + if (e.v) + langScreen->SetPopupOrigin(e.v); + screenManager()->push(langScreen); + return UI::EVENT_DONE; + }); systemSettings->Add(new CheckBox(&g_Config.bUISound, sy->T("UI Sound"))); const Path bgPng = GetSysDirectory(DIRECTORY_SYSTEM) / "background.png"; const Path bgJpg = GetSysDirectory(DIRECTORY_SYSTEM) / "background.jpg"; @@ -1609,25 +1632,6 @@ UI::EventReturn GameSettingsScreen::OnChangeMacAddress(UI::EventParams &e) { return UI::EVENT_DONE; } -UI::EventReturn GameSettingsScreen::OnLanguage(UI::EventParams &e) { - auto sy = GetI18NCategory("System"); - auto langScreen = new NewLanguageScreen(sy->T("Language")); - langScreen->OnChoice.Handle(this, &GameSettingsScreen::OnLanguageChange); - if (e.v) - langScreen->SetPopupOrigin(e.v); - screenManager()->push(langScreen); - return UI::EVENT_DONE; -} - -UI::EventReturn GameSettingsScreen::OnLanguageChange(UI::EventParams &e) { - screenManager()->RecreateAllViews(); - - if (host) { - host->UpdateUI(); - } - return UI::EVENT_DONE; -} - UI::EventReturn GameSettingsScreen::OnTextureShader(UI::EventParams &e) { auto gr = GetI18NCategory("Graphics"); auto shaderScreen = new TextureShaderScreen(gr->T("Texture Shader")); diff --git a/UI/GameSettingsScreen.h b/UI/GameSettingsScreen.h index a3fcd0ddc3..5b51ee101d 100644 --- a/UI/GameSettingsScreen.h +++ b/UI/GameSettingsScreen.h @@ -80,15 +80,11 @@ private: UI::EventReturn OnControlMapping(UI::EventParams &e); UI::EventReturn OnCalibrateAnalogs(UI::EventParams &e); UI::EventReturn OnTouchControlLayout(UI::EventParams &e); - UI::EventReturn OnDumpNextFrameToLog(UI::EventParams &e); UI::EventReturn OnTiltTypeChange(UI::EventParams &e); UI::EventReturn OnTiltCustomize(UI::EventParams &e); // Global settings handlers - UI::EventReturn OnLanguage(UI::EventParams &e); - UI::EventReturn OnLanguageChange(UI::EventParams &e); UI::EventReturn OnAutoFrameskip(UI::EventParams &e); - UI::EventReturn OnPostProcShaderChange(UI::EventParams &e); UI::EventReturn OnTextureShader(UI::EventParams &e); UI::EventReturn OnTextureShaderChange(UI::EventParams &e); UI::EventReturn OnDeveloperTools(UI::EventParams &e); diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp index 769fb2f01f..e00ec856a0 100644 --- a/UI/MiscScreens.cpp +++ b/UI/MiscScreens.cpp @@ -551,45 +551,6 @@ void PromptScreen::TriggerFinish(DialogResult result) { UIDialogScreenWithBackground::TriggerFinish(result); } -PostProcScreen::PostProcScreen(const std::string &title, int id, bool showStereoShaders) : ListPopupScreen(title), id_(id), showStereoShaders_(showStereoShaders) { } - -void PostProcScreen::CreateViews() { - auto ps = GetI18NCategory("PostShaders"); - ReloadAllPostShaderInfo(screenManager()->getDrawContext()); - shaders_ = GetAllPostShaderInfo(); - std::vector items; - int selected = -1; - const std::string selectedName = id_ >= (int)g_Config.vPostShaderNames.size() ? "Off" : g_Config.vPostShaderNames[id_]; - - for (int i = 0; i < (int)shaders_.size(); i++) { - if (!shaders_[i].visible) - continue; - if (shaders_[i].isStereo != showStereoShaders_) - continue; - if (shaders_[i].section == selectedName) - selected = (int)indexTranslation_.size(); - items.push_back(ps->T(shaders_[i].section.c_str(), shaders_[i].name.c_str())); - indexTranslation_.push_back(i); - } - adaptor_ = UI::StringVectorListAdaptor(items, selected); - ListPopupScreen::CreateViews(); -} - -void PostProcScreen::OnCompleted(DialogResult result) { - if (result != DR_OK) - return; - const std::string &value = shaders_[indexTranslation_[listView_->GetSelected()]].section; - // I feel this logic belongs more in the caller, but eh... - if (showStereoShaders_) { - g_Config.sStereoToMonoShader = value; - } else { - if (id_ < (int)g_Config.vPostShaderNames.size()) - g_Config.vPostShaderNames[id_] = value; - else - g_Config.vPostShaderNames.push_back(value); - } -} - TextureShaderScreen::TextureShaderScreen(const std::string &title) : ListPopupScreen(title) {} void TextureShaderScreen::CreateViews() { @@ -619,7 +580,7 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen #ifdef _MSC_VER #pragma warning(disable:4566) #endif - langValuesMapping = GetLangValuesMapping(); + auto &langValuesMapping = g_Config.GetLangValuesMapping(); std::vector tempLangs; VFSGetFileListing("lang", &tempLangs, "ini"); @@ -655,11 +616,12 @@ NewLanguageScreen::NewLanguageScreen(const std::string &title) : ListPopupScreen std::string buttonTitle = lang.name; if (!code.empty()) { - if (langValuesMapping.find(code) == langValuesMapping.end()) { + auto iter = langValuesMapping.find(code); + if (iter == langValuesMapping.end()) { // No title found, show locale code buttonTitle = code; } else { - buttonTitle = langValuesMapping[code].first; + buttonTitle = iter->second.first; } } if (g_Config.sLanguageIni == code) @@ -700,11 +662,14 @@ void NewLanguageScreen::OnCompleted(DialogResult result) { if (iniLoadedSuccessfully) { // Dunno what else to do here. - if (langValuesMapping.find(code) == langValuesMapping.end()) { + auto &langValuesMapping = g_Config.GetLangValuesMapping(); + + auto iter = langValuesMapping.find(code); + if (iter == langValuesMapping.end()) { // Fallback to English g_Config.iLanguage = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH; } else { - g_Config.iLanguage = langValuesMapping[code].second; + g_Config.iLanguage = iter->second.second; } RecreateViews(); } else { diff --git a/UI/MiscScreens.h b/UI/MiscScreens.h index 341e3b7915..07f544f855 100644 --- a/UI/MiscScreens.h +++ b/UI/MiscScreens.h @@ -106,28 +106,9 @@ public: private: void OnCompleted(DialogResult result) override; bool ShowButtons() const override { return true; } - std::map> langValuesMapping; - std::map titleCodeMapping; std::vector langs_; }; -class PostProcScreen : public ListPopupScreen { -public: - PostProcScreen(const std::string &title, int id, bool showStereoShaders); - - void CreateViews() override; - - const char *tag() const override { return "PostProc"; } - -private: - void OnCompleted(DialogResult result) override; - bool ShowButtons() const override { return true; } - std::vector shaders_; - int id_; - bool showStereoShaders_; - std::vector indexTranslation_; -}; - class TextureShaderScreen : public ListPopupScreen { public: TextureShaderScreen(const std::string &title); diff --git a/UI/NativeApp.cpp b/UI/NativeApp.cpp index 055d1ead17..3c5c6a1b24 100644 --- a/UI/NativeApp.cpp +++ b/UI/NativeApp.cpp @@ -1064,7 +1064,7 @@ void TakeScreenshot() { } void RenderOverlays(UIContext *dc, void *userdata) { - // Thin bar at the top of the screen like Chrome. + // Thin bar at the top of the screen. std::vector progress = g_DownloadManager.GetCurrentProgress(); if (!progress.empty()) { static const uint32_t colors[4] = { @@ -1091,8 +1091,8 @@ void RenderOverlays(UIContext *dc, void *userdata) { } void NativeRender(GraphicsContext *graphicsContext) { - _assert_(graphicsContext != nullptr); - _assert_(screenManager != nullptr); + _dbg_assert_(graphicsContext != nullptr); + _dbg_assert_(screenManager != nullptr); g_GameManager.Update(); diff --git a/Windows/MainWindowMenu.cpp b/Windows/MainWindowMenu.cpp index 37c01cb3ed..25af2cd08e 100644 --- a/Windows/MainWindowMenu.cpp +++ b/Windows/MainWindowMenu.cpp @@ -154,68 +154,6 @@ namespace MainWindow { AppendMenu(helpMenu, MF_STRING | MF_BYCOMMAND, ID_HELP_ABOUT, aboutPPSSPP.c_str()); } - void UpdateDynamicMenuCheckmarks(HMENU menu) { - int item = ID_SHADERS_BASE + 1; - - for (size_t i = 0; i < availableShaders.size(); i++) { - bool checked = false; - if (g_Config.vPostShaderNames.empty() && availableShaders[i] == "Off") - checked = true; - else if (g_Config.vPostShaderNames.size() == 1 && availableShaders[i] == g_Config.vPostShaderNames[0]) - checked = true; - - CheckMenuItem(menu, item++, checked ? MF_CHECKED : MF_UNCHECKED); - } - } - - bool CreateShadersSubmenu(HMENU menu) { - // NOTE: We do not load this until translations are loaded! - if (!I18NCategoryLoaded("PostShaders")) - return false; - - // We only reload this initially and when a menu is actually opened. - if (!menuShaderInfoLoaded) { - // This is on Windows where we don't currently blacklist any vendors, or similar. - // TODO: Figure out how to have the GPU data while reloading the post shader info. - ReloadAllPostShaderInfo(nullptr); - menuShaderInfoLoaded = true; - } - - std::vector info = GetAllPostShaderInfo(); - - if (menuShaderInfo.size() == info.size() && std::equal(info.begin(), info.end(), menuShaderInfo.begin())) { - return false; - } - - auto ps = GetI18NCategory("PostShaders"); - - HMENU shaderMenu = GetSubmenuById(menu, ID_OPTIONS_SHADER_MENU); - EmptySubMenu(shaderMenu); - - int item = ID_SHADERS_BASE + 1; - const char *translatedShaderName = nullptr; - - availableShaders.clear(); - for (auto i = info.begin(); i != info.end(); ++i) { - if (!i->visible) - continue; - int checkedStatus = MF_UNCHECKED; - availableShaders.push_back(i->section); - if (g_Config.vPostShaderNames.empty() && i->section == "Off") { - checkedStatus = MF_CHECKED; - } else if (g_Config.vPostShaderNames.size() == 1 && g_Config.vPostShaderNames[0] == i->section) { - checkedStatus = MF_CHECKED; - } - - translatedShaderName = ps->T(i->section.c_str(), i->name.c_str()); - - AppendMenu(shaderMenu, MF_STRING | MF_BYPOSITION | checkedStatus, item++, ConvertUTF8ToWString(translatedShaderName).c_str()); - } - - menuShaderInfo = info; - return true; - } - static void TranslateMenuItem(const HMENU hMenu, const int menuID, const std::wstring& accelerator = L"", const char *key = nullptr) { auto des = GetI18NCategory("DesktopUI"); @@ -302,7 +240,6 @@ namespace MainWindow { // Skip display multipliers x1-x10 TranslateMenuItem(menu, ID_OPTIONS_FULLSCREEN, g_Config.bSystemControls ? L"\tAlt+Return, F11" : L""); TranslateMenuItem(menu, ID_OPTIONS_VSYNC); - TranslateMenuItem(menu, ID_OPTIONS_SHADER_MENU); TranslateMenuItem(menu, ID_OPTIONS_SCREEN_MENU, g_Config.bSystemControls ? L"\tCtrl+1" : L""); TranslateMenuItem(menu, ID_OPTIONS_SCREENAUTO); // Skip rendering resolution 2x-5x.. @@ -360,10 +297,6 @@ namespace MainWindow { changed = true; } - if (CreateShadersSubmenu(menu)) { - changed = true; - } - if (changed) { DrawMenuBar(hWnd); } @@ -1034,25 +967,8 @@ namespace MainWindow { break; default: - { - // Handle the dynamic shader switching here. - // The Menu ID is contained in wParam, so subtract - // ID_SHADERS_BASE and an additional 1 off it. - u32 index = (wParam - ID_SHADERS_BASE - 1); - if (index < availableShaders.size()) { - g_Config.vPostShaderNames.clear(); - if (availableShaders[index] != "Off") - g_Config.vPostShaderNames.push_back(availableShaders[index]); - g_Config.bShaderChainRequires60FPS = PostShaderChainRequires60FPS(GetFullPostShadersChain(g_Config.vPostShaderNames)); - - NativeMessageReceived("gpu_renderResized", ""); - NativeMessageReceived("postshader_updated", ""); - break; - } - MessageBox(hWnd, L"Unimplemented", L"Sorry", 0); - } - break; + break; } } @@ -1329,7 +1245,6 @@ namespace MainWindow { EnableMenuItem(menu, ID_DEBUG_GEDEBUGGER, MF_GRAYED); #endif - UpdateDynamicMenuCheckmarks(menu); UpdateCommands(); } diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 54951ee77a..40a9d9cc6d 100644 --- a/Windows/ppsspp.rc +++ b/Windows/ppsspp.rc @@ -553,10 +553,6 @@ BEGIN MENUITEM "Fullscreen", ID_OPTIONS_FULLSCREEN MENUITEM "VSync", ID_OPTIONS_VSYNC MENUITEM "Skip Buffer Effects", ID_OPTIONS_SKIP_BUFFER_EFFECTS - POPUP "Postprocessing Shader", ID_OPTIONS_SHADER_MENU - BEGIN - MENUITEM "", 0, MFT_SEPARATOR - END POPUP "Rendering Resolution", ID_OPTIONS_SCREEN_MENU BEGIN MENUITEM "Auto", ID_OPTIONS_SCREENAUTO diff --git a/Windows/resource.h b/Windows/resource.h index 6bc03a9429..83ef889573 100644 --- a/Windows/resource.h +++ b/Windows/resource.h @@ -118,8 +118,6 @@ #define IDC_GEDBG_PRIMCOUNTER 1201 #define IDC_BUTTON_SEARCH 1204 -#define ID_SHADERS_BASE 5000 - #define ID_FILE_EXIT 40000 #define ID_DEBUG_SAVEMAPFILE 40001 #define ID_DISASM_RUNTOHERE 40004 diff --git a/assets/lang/ar_AE.ini b/assets/lang/ar_AE.ini index d862a5b530..7fca56e265 100644 --- a/assets/lang/ar_AE.ini +++ b/assets/lang/ar_AE.ini @@ -192,7 +192,6 @@ Pause = ‎&إيقاف مؤقت Pause When Not Focused = ‎&إيقاف مؤقت حينما لا يكون مفعلاً Portrait = ‎لوحة Portrait reversed = ‎لوحة معكوسة -Postprocessing Shader = Postprocessin&g shader PPSSPP Forums = ‎PPSSPP &منتديات Record = ‎&تسجيل Record Audio = ‎تسجيل &الصوت @@ -322,6 +321,8 @@ Load completed = ‎التحميل إكتمل. Loading = ‎تحميل\nمن فضلك إنتظر... LoadingFailed = ‎غير قادر علي تحميل البيانات. Move = ‎تحريك +Move Down = Move Down +Move Up = Move Up Network Connection = ‎إتصال الشبكة NEW DATA = ‎بيانات جديدة No = ‎لا @@ -329,6 +330,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = ‎حسناً Old savedata detected = ‎بيانات حفظ قديمة قد إكتشفت Options = ‎إعدادات +Remove = Remove Reset = ‎إستعادة Resize = ‎تغيير الحجم Retry = ‎حاول مجدداً @@ -536,8 +538,7 @@ Overlay Information = ‎معلومات النسق Partial Stretch = ‎تمطيط جزئي Percent of FPS = Percent of FPS Performance = ‎الأداء -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1050,6 +1051,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/az_AZ.ini b/assets/lang/az_AZ.ini index d7747c4d18..77b127ddd3 100644 --- a/assets/lang/az_AZ.ini +++ b/assets/lang/az_AZ.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Yükləmə Tamamlandı Loading = Yüklənir\nZəhmət Olmasa Gözləyin... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = NEW DATA No = Xeyir @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = Overlay information Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/bg_BG.ini b/assets/lang/bg_BG.ini index 2c3cda2d84..8448605e28 100644 --- a/assets/lang/bg_BG.ini +++ b/assets/lang/bg_BG.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = Пауза, когато не фокусиран Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &форум Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Зареждането завършено. Loading = Зареждане\nМоля изчакайте... LoadingFailed = Unable to load data. Move = Преместване +Move Down = Move Down +Move Up = Move Up Network Connection = Мрежова връзка NEW DATA = Нови данни No = Не @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Преоразмеряване Retry = Нов опит @@ -528,8 +530,7 @@ Overlay Information = Обща информация Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/ca_ES.ini b/assets/lang/ca_ES.ini index 4c1a0f9ec6..6aaddb4987 100644 --- a/assets/lang/ca_ES.ini +++ b/assets/lang/ca_ES.ini @@ -184,7 +184,6 @@ Pause = &Pausa Pause When Not Focused = &Pausa quan es canviï de finestra Portrait = Vertical Portrait reversed = Vertical invertit -Postprocessing Shader = &Shader de postprocessat PPSSPP Forums = &Fòrums de PPSSPP Record = Enregistreu Record Audio = Enregistreu Àudio @@ -314,6 +313,8 @@ Load completed = Carrega completada Loading = Carregant\nEspera un moment... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = NEW DATA No = No @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = Overlay information Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/cz_CZ.ini b/assets/lang/cz_CZ.ini index dbb664fefa..6870e757c8 100644 --- a/assets/lang/cz_CZ.ini +++ b/assets/lang/cz_CZ.ini @@ -184,7 +184,6 @@ Pause = &Pozastavit Pause When Not Focused = &Pozastavit pokud okno není zaměřeno Portrait = Na výšku Portrait reversed = Na výšku obráceně -Postprocessing Shader = &Shader následného zpracování PPSSPP Forums = &Fóra PPSSPP Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Načítání dokončeno. Loading = Načítání\nČekejte prosím... LoadingFailed = Nelze načíst data. Move = Přesunout +Move Down = Move Down +Move Up = Move Up Network Connection = Síťové připojení NEW DATA = NOVÁ DATA No = Ne @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Zjištěna stará uložená data Options = Volby +Remove = Remove Reset = Resetovat Resize = Velikost Retry = Zkusit znovu @@ -528,8 +530,7 @@ Overlay Information = Informace v překryvu Partial Stretch = Částečné roztažení Percent of FPS = Percent of FPS Performance = Výkon -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Shader následného zpracování +Postprocessing shaders = Shader následného zpracování Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/da_DK.ini b/assets/lang/da_DK.ini index f55140f39b..26516055bc 100644 --- a/assets/lang/da_DK.ini +++ b/assets/lang/da_DK.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = P&ause når ikke i fokus Portrait = Portræt Portrait reversed = Omvendt portræt -Postprocessing Shader = Efterbehandlin&gs shader PPSSPP Forums = PPSSPP &forum Record = Optag Record Audio = Optag Lyd @@ -314,6 +313,8 @@ Load completed = Hentet. Loading = Henter\nVent venligst... LoadingFailed = Ikke muligt at indlæse data. Move = Flyt +Move Down = Move Down +Move Up = Move Up Network Connection = Netværksforbindelse NEW DATA = NY DATA No = Nej @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Gamle savedata fundet Options = Optioner +Remove = Remove Reset = Nulstil Resize = Størrelse Retry = Prøv igen @@ -528,8 +530,7 @@ Overlay Information = Overlay information Partial Stretch = Delvis strukket Percent of FPS = Percent of FPS Performance = Ydelse -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Efterbehandlings shader +Postprocessing shaders = Efterbehandlings-shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/de_DE.ini b/assets/lang/de_DE.ini index 0e183a0dfb..9f351c67d8 100644 --- a/assets/lang/de_DE.ini +++ b/assets/lang/de_DE.ini @@ -184,7 +184,6 @@ Pause = Pause Pause When Not Focused = Pausieren im Hintergrund Portrait = Hochformat Portrait reversed = Hochformat umgedreht -Postprocessing Shader = Nachbearbeitungs-Shader PPSSPP Forums = PPSSPP Forum Record = Aufzeichnung Record Audio = Ton aufzeichnen @@ -314,6 +313,8 @@ Load completed = Laden abgeschlossen Loading = Laden\nBitte warten... LoadingFailed = Daten konnten nicht geladen werden. Move = Bewegen +Move Down = Move Down +Move Up = Move Up Network Connection = Netzwerkverbindung NEW DATA = Neue Daten No = Nein @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Alter Speicherstand entdeckt Options = Optionen +Remove = Remove Reset = Zurücksetzen Resize = Größe ändern Retry = Wiederholen @@ -528,8 +530,7 @@ Overlay Information = Eingeblendete Informationen Partial Stretch = Teilweise strecken Percent of FPS = Prozent an FPS Performance = Leistung -Postprocessing effect = Nachbearbeitungs-Effekte -Postprocessing Shader = Nachbearbeitungs-Shader +Postprocessing shaders = Nachbearbeitungs-Shader Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Kann Framerate smoother in Spielen machen, die eine niedrige Framerate haben. @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger vorhanden +Depth buffer format = Depth buffer format Device Info = Geräteinfo Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/dr_ID.ini b/assets/lang/dr_ID.ini index 8f8340c886..be19011bf0 100644 --- a/assets/lang/dr_ID.ini +++ b/assets/lang/dr_ID.ini @@ -184,7 +184,6 @@ Pause = &Paus Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forumna Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Tibukka'mi. Loading = Dibukka'i\nTajammi... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = DATA baru No = Edda mane @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = Okemi mane Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = Pempakitan Overlay Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/en_US.ini b/assets/lang/en_US.ini index de41e305d8..e7d6e56f25 100644 --- a/assets/lang/en_US.ini +++ b/assets/lang/en_US.ini @@ -208,7 +208,6 @@ Pause = &Pause Pause When Not Focused = &Pause when not focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g shader PPSSPP Forums = PPSSPP &forums Record = &Record Record Audio = Record &audio @@ -338,6 +337,8 @@ Load completed = Load completed. Loading = Loading\nPlease Wait... LoadingFailed = Unable to load data. Move = Move +Move Up = Move Up +Move Down = Move Down Network Connection = Network Connection NEW DATA = NEW DATA No = No @@ -345,6 +346,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -552,8 +554,7 @@ Overlay Information = Overlay information Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1059,6 +1060,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Information = Display information diff --git a/assets/lang/es_ES.ini b/assets/lang/es_ES.ini index d41857869a..0e08165255 100644 --- a/assets/lang/es_ES.ini +++ b/assets/lang/es_ES.ini @@ -184,7 +184,6 @@ Pause = &Pausar Pause When Not Focused = &Pausar al cambiar de ventana Portrait = &Vertical Portrait reversed = Vertical &invertido -Postprocessing Shader = &Shader de postprocesado PPSSPP Forums = &Foro de PPSSPP Record = G&rabar Record Audio = Grabar &audio @@ -314,6 +313,8 @@ Load completed = Carga completada. Loading = Cargando\nEspera un momento... LoadingFailed = Los datos del juego no se pudieron cargar. Move = Posición +Move Down = Move Down +Move Up = Move Up Network Connection = Conexión de red NEW DATA = NUEVOS DATOS DE PARTIDA No = No @@ -321,6 +322,7 @@ ObtainingIP = Obteniendo direcciónnn IP.\nPor favor espera... OK = Aceptar Old savedata detected = Se han detectado datos del juego antiguos. Options = Opciones +Remove = Remove Reset = Reiniciar Resize = Tamaño Retry = Reintentar @@ -528,8 +530,7 @@ Overlay Information = Información en pantalla Partial Stretch = Estirado parcial Percent of FPS = % de FPS Performance = Rendimiento -Postprocessing effect = Efecto de postprocesado -Postprocessing Shader = Shader de postprocesado +Postprocessing shaders = Shaders de postprocesado Recreate Activity = Recrear actividad Render duplicate frames to 60hz = Renderizar cuadros duplicados a 60Hz RenderDuplicateFrames Tip = Puede hacer la imagen más fluida in juegos con una tasa de cuadros más baja. @@ -1042,6 +1043,7 @@ CPU Name = Nombre D3DCompiler Version = Versión del compilador D3D Debug = Desarrollo Debugger Present = Depurador presente +Depth buffer format = Depth buffer format Device Info = Info. del dispositivo Directories = Directorios Display Color Formats = Display Color Formats diff --git a/assets/lang/es_LA.ini b/assets/lang/es_LA.ini index e36fd8c31c..1c60ffd956 100644 --- a/assets/lang/es_LA.ini +++ b/assets/lang/es_LA.ini @@ -184,7 +184,6 @@ Pause = &Pausar Pause When Not Focused = &Pausar al cambiar de ventana Portrait = Retrato Portrait reversed = Retrato inverso -Postprocessing Shader = &Shader de postprocesado PPSSPP Forums = &Foro de PPSSPP Record = G&rabar Record Audio = Grabar &audio @@ -314,6 +313,8 @@ Load completed = Datos cargados. Loading = Cargando\nPor favor espere... LoadingFailed = Los datos del juego no se pudieron cargar. Move = Mover +Move Down = Move Down +Move Up = Move Up Network Connection = Conexión de red NEW DATA = CREAR DATOS No = No @@ -321,6 +322,7 @@ ObtainingIP = Obteniendo dirección IP.\nEspera un momento... OK = OK Old savedata detected = Se han detectado datos del juego antiguos. Options = Opciones +Remove = Remove Reset = Reiniciar Resize = Tamaño Retry = Reintentar @@ -528,8 +530,7 @@ Overlay Information = Información en pantalla Partial Stretch = Estirado parcial Percent of FPS = % de FPS Performance = Rendimiento -Postprocessing effect = Efectos de postprocesado -Postprocessing Shader = Shader de postprocesado +Postprocessing shaders = Shaders de postprocesado Recreate Activity = Recrear actividad Render duplicate frames to 60hz = Procesar cuadros duplicados a 60 Hz RenderDuplicateFrames Tip = Puede hacer que la fluidez sea más suave en juegos con tasas de cuadros bajas. @@ -1042,6 +1043,7 @@ CPU Name = Nombre D3DCompiler Version = Versión del compilador D3D Debug = Desarrollo Debugger Present = Depurador presente +Depth buffer format = Depth buffer format Device Info = Info de dispositivo Directories = Directorios Display Color Formats = Display Color Formats diff --git a/assets/lang/fa_IR.ini b/assets/lang/fa_IR.ini index 54e119c4f2..ce59fe1520 100644 --- a/assets/lang/fa_IR.ini +++ b/assets/lang/fa_IR.ini @@ -184,7 +184,6 @@ Pause = ‎مکث Pause When Not Focused = ‎هنگامی که پنجره فعال نباشد بازی متوقف شود Portrait = ‎عمودی Portrait reversed = ‎عمودی وارونه -Postprocessing Shader = ‎اضافه کردن افکت PPSSPP Forums = ‎PPSSPP انجمن های Record = ‎ضبط کردن Record Audio = ‎ضبط صدا @@ -314,6 +313,8 @@ Load completed = ‎.بارگیری نکمیل شد Loading = ‎درحال بارگیری\n...منتظر بمانید LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = ‎دیتای جدید No = ‎خیر @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = ‎تایید Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = ‎Overlay اطلاعات Partial Stretch = ‎کشیدگی جزئی Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = ‎افکت پس-پردازش +Postprocessing shaders = ‎افکت پس-پردازش Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/fi_FI.ini b/assets/lang/fi_FI.ini index 260e4d30c7..030b9adfbe 100644 --- a/assets/lang/fi_FI.ini +++ b/assets/lang/fi_FI.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Lataus onnistui. Loading = Ladataan\nOdota... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = NEW DATA No = Ei @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = Overlay information Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/fr_FR.ini b/assets/lang/fr_FR.ini index 89a4cde7ce..20bf66436f 100644 --- a/assets/lang/fr_FR.ini +++ b/assets/lang/fr_FR.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = Mettre en pa&use si pas au premier plan Portrait = Portrait Portrait reversed = Portrait inversé -Postprocessing Shader = S&haders de post-traitement PPSSPP Forums = Visiter le &forum de PPSSPP Record = E&nregistrer Record Audio = Enregistrer le &son @@ -314,6 +313,8 @@ Load completed = Chargement terminé. Loading = Chargement\nVeuillez patienter... LoadingFailed = Chargement impossible. Move = Déplacer +Move Down = Move Down +Move Up = Move Up Network Connection = Connexion réseau NEW DATA = NOUVELLES DONNÉES No = Non @@ -321,6 +322,7 @@ ObtainingIP = Obtention de l'adresse IP\nVeuillez patienter... OK = OK Old savedata detected = Ancienne sauvegarde détectée Options = Options +Remove = Remove Reset = Remise à 0 Resize = Zoomer Retry = Réessayer @@ -528,8 +530,7 @@ Overlay Information = Informations incrustées à l'écran Partial Stretch = Étirement partiel Percent of FPS = Pourcentage de FPS Performance = Performances -Postprocessing effect = Effets de post-traitement -Postprocessing Shader = Shaders de post-traitement +Postprocessing shaders = Shaders de post-traitement Recreate Activity = Recréer l'animation Render duplicate frames to 60hz = Dupliquer les images pour atteindre 60 Hz RenderDuplicateFrames Tip = Peut améliorer la fluidité dans les jeux qui fonctionnent à des fréquences d'images plus faibles @@ -1033,6 +1034,7 @@ CPU Name = Nom D3DCompiler Version = Version de D3DCompiler Debug = Débogage Debugger Present = Débogueur présent +Depth buffer format = Depth buffer format Device Info = Informations sur l'appareil Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/gl_ES.ini b/assets/lang/gl_ES.ini index 4f301f1147..5384d7b934 100644 --- a/assets/lang/gl_ES.ini +++ b/assets/lang/gl_ES.ini @@ -184,7 +184,6 @@ Pause = &Pausar Pause When Not Focused = &Pausar ó cambiar de ventá Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = &Shader de postprocesado PPSSPP Forums = &Foro de PPSSPP Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Carga completada. Loading = Cargando\nAgarda un momento... LoadingFailed = Os datos nom se puideron cargar. Move = Posición +Move Down = Move Down +Move Up = Move Up Network Connection = Conexión de rede NEW DATA = NOVOS DATOS No = Non @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = Aceptar Old savedata detected = Detectados datos de gardado antigos. Options = Options +Remove = Remove Reset = Reiniciar Resize = Tamaño Retry = Reintentar @@ -528,8 +530,7 @@ Overlay Information = Información en pantalla Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Rendemento -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Shader de postprocesado +Postprocessing shaders = Shaders de postprocesado Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/gr_EL.ini b/assets/lang/gr_EL.ini index 0fd4b4889b..113602a7a2 100644 --- a/assets/lang/gr_EL.ini +++ b/assets/lang/gr_EL.ini @@ -184,7 +184,6 @@ Pause = &Πάυση Pause When Not Focused = Παύση σε κατάσταση παρασκηνίου Portrait = Κατακόρυφο προσανατολισμός Portrait reversed = Αντεστραμένος κατακόρυφος προσανατολισμός -Postprocessing Shader = Shader Μετεπεξεργασίας PPSSPP Forums = PPSSPP &Forum Record = Καταγραφή Record Audio = Καταγραφή Ήχου @@ -314,6 +313,8 @@ Load completed = ΦΟΡΤΩΣΗ ΟΛΟΚΛΗΡΩΘΗΚΕ Loading = ΦΟΡΤΩΣΗ\nΠΑΡΑΚΑΛΩ ΠΕΡΙΜΕΝΕΤΕ... LoadingFailed = ΑΔΥΝΑΜΙΑ ΦΟΡΤΩΣΗΣ ΔΕΔΟΜΕΝΩΝ. Move = ΜΕΤΑΚΙΝΗΣΗ +Move Down = Move Down +Move Up = Move Up Network Connection = ΣΥΝΔΕΣΗ ΔΙΚΤΥΟΥ NEW DATA = ΝΕΑ ΔΕΔΟΜΕΝΑ No = ΟΧΙ @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Εντοπίστηκαν παλαιά αρχεία αποθήκευσης Options = ΕΠΙΛΟΓΕΣ +Remove = Remove Reset = ΕΠΑΝΑΦΟΡΑ Resize = ΑΛΛΑΓΗ ΜΕΓΕΘΟΥΣ Retry = ΕΠΑΝΑΛΗΨΗ @@ -528,8 +530,7 @@ Overlay Information = Πληροφορίες Οθόνης Partial Stretch = Μερική επέκταση Percent of FPS = Percent of FPS Performance = Επίδοσεις -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Shader Μετεπεξεργασίας +Postprocessing shaders = Shaders Μετεπεξεργασίας Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Όνομα D3DCompiler Version = Έκδοση D3DCompiler Debug = Εντοπισμός σφαλμάτων Debugger Present = Παρουσία πρόγραμματος εντοπισμού σφαλμάτων +Depth buffer format = Depth buffer format Device Info = Πληροφορίες συσκευής Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/he_IL.ini b/assets/lang/he_IL.ini index 12d2b9dfd9..3e1145ab04 100644 --- a/assets/lang/he_IL.ini +++ b/assets/lang/he_IL.ini @@ -184,7 +184,6 @@ Pause = &השהה Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = .המלשוה הניעט Loading = ...ןתמה אנא ...ןעוט LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = םישדח םינותנ No = אל @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = רדסב Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = כיסוי מידע Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/he_IL_invert.ini b/assets/lang/he_IL_invert.ini index a455edd43d..5087eeb6ac 100644 --- a/assets/lang/he_IL_invert.ini +++ b/assets/lang/he_IL_invert.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = .המלשוה הניעט Loading = ...ןתמה אנא ...ןעוט LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = םישדח םינותנ No = אל @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = רדסב Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = עדימ יוסיכ Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/hr_HR.ini b/assets/lang/hr_HR.ini index dd275caed9..c39645fbd7 100644 --- a/assets/lang/hr_HR.ini +++ b/assets/lang/hr_HR.ini @@ -184,7 +184,6 @@ Pause = &Pauza Pause When Not Focused = &Pauziraj kad nije fokusirano Portrait = Portret Portrait reversed = Obrnuti portret -Postprocessing Shader = Postupa&k sjenčanja PPSSPP Forums = PPSSPP &forumi Record = &Snimaj Record Audio = Snimaj &zvuk @@ -314,6 +313,8 @@ Load completed = Učitavanje dovršeno. Loading = Učitavanje\nPričekajte... LoadingFailed = Nije moguće učitati datu. Move = Pomakni +Move Down = Move Down +Move Up = Move Up Network Connection = Internetska veza NEW DATA = NOVA DATA No = Ne @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Uočena stara savedata Options = Opcije +Remove = Remove Reset = Reset Resize = Resize Retry = Ponovi @@ -528,8 +530,7 @@ Overlay Information = Prekrivanje informacija Partial Stretch = Djelomično rastezanje Percent of FPS = Postotak FPS-a Performance = Performansa -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Sjenčanje poslije procesa +Postprocessing shaders = Sjenčanje poslije procesa Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Izlgađiva frameove u igrama koje ih jako malo imaju @@ -1042,6 +1043,7 @@ CPU Name = Ime D3DCompiler Version = D3DCompiler verzija Debug = Otklanjanje grešaka Debugger Present = Otklanjivač grešaka prisutan +Depth buffer format = Depth buffer format Device Info = Informacije o uređaju Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/hu_HU.ini b/assets/lang/hu_HU.ini index 09bf6c6476..71859b15d9 100644 --- a/assets/lang/hu_HU.ini +++ b/assets/lang/hu_HU.ini @@ -184,7 +184,6 @@ Pause = &Szünet Pause When Not Focused = &Szüneteltetés, ha nincs fókuszban Portrait = Álló Portrait reversed = Fordított álló -Postprocessing Shader = Utóeffektező shader PPSSPP Forums = PPSSPP &fórum Record = &Felvétel Record Audio = &Hang felvétele @@ -314,6 +313,8 @@ Load completed = Betöltve. Loading = Betöltés\nKérlek várj... LoadingFailed = Betöltés sikertelen. Move = Mozgat +Move Down = Move Down +Move Up = Move Up Network Connection = Hálózati kapcsolat NEW DATA = ÚJ MENTÉS No = Nem @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Régi mentés észlelve Options = Opciók +Remove = Remove Reset = Visszaállít Resize = Átméretez Retry = Újra @@ -528,8 +530,7 @@ Overlay Information = Overlay információk Partial Stretch = Részleges nyújtás Percent of FPS = FPS százalékában Performance = Teljesítmény -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Utóeffektező shader +Postprocessing shaders = Utóeffektező shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Képkockák duplázása 60 Hz rendereléshez RenderDuplicateFrames Tip = Simábbá teheti az alacsonyabb képkocka számon futó játékok kirajzolását @@ -1042,6 +1043,7 @@ CPU Name = Név D3DCompiler Version = D3DCompiler verzió Debug = Hibakeresés Debugger Present = Debugger jelen +Depth buffer format = Depth buffer format Device Info = Eszközinfó Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/id_ID.ini b/assets/lang/id_ID.ini index ff777e4581..e821086ee2 100644 --- a/assets/lang/id_ID.ini +++ b/assets/lang/id_ID.ini @@ -184,7 +184,6 @@ Pause = Jeda Pause When Not Focused = Jeda ketika tidak fokus Portrait = Tegak Portrait reversed = Tegak terbalik -Postprocessing Shader = Pemrosesan shader PPSSPP Forums = &Forum PPSSPP Record = Rekam Record Audio = Rekam suara @@ -314,6 +313,8 @@ Load completed = Selesai memuat. Loading = Memuat\nMohon Tunggu... LoadingFailed = Tidak dapat memuat data. Move = Pindah +Move Down = Move Down +Move Up = Move Up Network Connection = Koneksi Jaringan NEW DATA = DATA BARU No = Tidak @@ -321,6 +322,7 @@ ObtainingIP = Mendapatkan alamat IP.\nHarap tunggu... OK = Oke Old savedata detected = Simpanan data lama terdeteksi Options = Pilihan +Remove = Remove Reset = Atur ulang Resize = Atur ulang ukuran Retry = Coba lagi @@ -528,8 +530,7 @@ Overlay Information = Tampilan Informasi Partial Stretch = Peregangan sebagian Percent of FPS = Persen FPS Performance = Kinerja -Postprocessing effect = Efek pemrosesan -Postprocessing Shader = Pemrosesan shader +Postprocessing shaders = Pemrosesan shaders Recreate Activity = Buat ulang aktivitas Render duplicate frames to 60hz = Pelukisan bingkai duplikat menjadi 60 Hz RenderDuplicateFrames Tip = Dapat membuat laju bingkai lebih lancar dalam permainan yang berjalan pada laju bingkai yang lebih rendah @@ -1042,6 +1043,7 @@ CPU Name = Nama CPU D3DCompiler Version = Versi D3DCompiler Debug = Awakutu Debugger Present = Pengawakutu tersedia +Depth buffer format = Depth buffer format Device Info = Info perangkat Directories = Direktori Display Color Formats = Format warna tampilan diff --git a/assets/lang/it_IT.ini b/assets/lang/it_IT.ini index 0af6c2d099..2e88064c95 100644 --- a/assets/lang/it_IT.ini +++ b/assets/lang/it_IT.ini @@ -184,7 +184,6 @@ Pause = Pausa Pause When Not Focused = Pausa quando non attivo Portrait = Ritratto Portrait reversed = Ritratto invertito -Postprocessing Shader = Shader di post-elaborazione PPSSPP Forums = Forum PPSSPP Record = Registra Record Audio = Registra Audio @@ -314,6 +313,8 @@ Load completed = Caricamento completato. Loading = Caricamento in corso.\nAttendere, prego... LoadingFailed = Impossibile caricare i dati. Move = Sposta +Move Down = Move Down +Move Up = Move Up Network Connection = Connessione di Rete NEW DATA = NUOVI DATI No = No @@ -321,6 +322,7 @@ ObtainingIP = Cerco di ottenere l'indirizzo IP.\nAttendere, prego... OK = OK Old savedata detected = Rilevati vecchi dati salvati Options = Opzioni +Remove = Remove Reset = Reset Resize = Ridimensiona Retry = Riprova @@ -529,8 +531,7 @@ Overlay Information = Copri Informazioni Partial Stretch = Estensione Parziale Percent of FPS = Percentuale di FPS Performance = Prestazioni -Postprocessing effect = Effetti di post-elaborazione -Postprocessing Shader = Shader di post-elaborazione +Postprocessing shaders = Shader di post-elaborazione Recreate Activity = Ricrea l'animazione Render duplicate frames to 60hz = Duplica i frame da renderizzare a 60 Hz RenderDuplicateFrames Tip = Può migliorare la fluidità nei giochi che funzionano a frame rate inferiori @@ -1043,6 +1044,7 @@ CPU Name = Nome D3DCompiler Version = Versione D3DCompiler Debug = Debug Debugger Present = Debugger presente +Depth buffer format = Depth buffer format Device Info = Informazioni dispositivo Directories = Cartelle Display Color Formats = Formati colore di visualizzazione diff --git a/assets/lang/ja_JP.ini b/assets/lang/ja_JP.ini index c340110427..4bb7bb99f2 100644 --- a/assets/lang/ja_JP.ini +++ b/assets/lang/ja_JP.ini @@ -184,7 +184,6 @@ Pause = 一時停止(&P) Pause When Not Focused = 非フォーカス時は一時停止する(&P) Portrait = 縦 Portrait reversed = 縦 (反転) -Postprocessing Shader = 後処理シェーダ(&G) PPSSPP Forums = PPSSPPフォーラム(&F) Record = 記録(&R) Record Audio = オーディオを記録する(&A) @@ -314,6 +313,8 @@ Load completed = ロードが完了しました。 Loading = ロード中です。\nしばらくお待ちください... LoadingFailed = データをロードできませんでした。 Move = 移動 +Move Down = Move Down +Move Up = Move Up Network Connection = ネットワーク接続 NEW DATA = 新しいデータ No = いいえ @@ -321,6 +322,7 @@ ObtainingIP = IPアドレスの取得中。 \nしばらくお待ちください. OK = OK Old savedata detected = 古いセーブデータを検出しました Options = オプション +Remove = Remove Reset = リセット Resize = リサイズ Retry = リトライ @@ -528,8 +530,7 @@ Overlay Information = オーバーレイ表示 Partial Stretch = 部分的に拡大 Percent of FPS = FPS中のパーセント Performance = パフォーマンス -Postprocessing effect = 後処理エフェクト -Postprocessing Shader = 後処理シェーダ +Postprocessing shaders = 後処理シェーダ Recreate Activity = Recreate activity Render duplicate frames to 60hz = フレームを複製して60Hzでレンダリングする RenderDuplicateFrames Tip = フレームレートが低いゲームでフレームレートをよりスムーズにできます @@ -1042,6 +1043,7 @@ CPU Name = CPU名 D3DCompiler Version = D3DCompilerバージョン Debug = デバッグ Debugger Present = デバッガーあり +Depth buffer format = Depth buffer format Device Info = デバイス情報 Directories = ディレクトリ Display Color Formats = Display Color Formats diff --git a/assets/lang/jv_ID.ini b/assets/lang/jv_ID.ini index 36b869e9f2..595b012bcb 100644 --- a/assets/lang/jv_ID.ini +++ b/assets/lang/jv_ID.ini @@ -184,7 +184,6 @@ Pause = &Ngaso Pause When Not Focused = &Ngaso Nalika Ora Fokus Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Ngatifke Shader PPSSPP Forums = &Forum PPSSPP Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Mbukak rampung. Loading = Mbukak\nMohon nteni... LoadingFailed = Ora biso mbukak data. Move = Pindahno +Move Down = Move Down +Move Up = Move Up Network Connection = Koneksi Jaringan NEW DATA = DATA ANYAR No = Ora @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = He.eh Old savedata detected = Simpenan lawas terdeteksi Options = Opsi +Remove = Remove Reset = Ngreset Resize = Ubah Ukuran Retry = Jajal Maning @@ -528,8 +530,7 @@ Overlay Information = Informasi numpuki Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Kinerja -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/ko_KR.ini b/assets/lang/ko_KR.ini index f7cf4002ec..c7af635ae7 100644 --- a/assets/lang/ko_KR.ini +++ b/assets/lang/ko_KR.ini @@ -184,7 +184,6 @@ Pause = 일시 정지(&P) Pause When Not Focused = 포커싱되지 않았을 때 일시 정지(&P) Portrait = 세로방향 Portrait reversed = 세로방향 반전 -Postprocessing Shader = 후처리 셰이더(&G) PPSSPP Forums = PPSSPP 포럼(&F) Record = 녹음(&R) Record Audio = 사운드 녹음(&A) @@ -314,6 +313,8 @@ Load completed = 불러오기가 완료되었습니다. Loading = 로딩 중\n잠시만 기다려 주세요... LoadingFailed = 데이터를 불러올 수 없습니다. Move = 이동 +Move Down = Move Down +Move Up = Move Up Network Connection = 네트워크 연결 NEW DATA = 새로운 데이터 No = 아니오 @@ -321,6 +322,7 @@ ObtainingIP = IP 주소를 가져오는 중입니다.\n잠시만 기다려 주 OK = 확인 Old savedata detected = 오래된 저장 데이터 감지됨 Options = 옵션 +Remove = Remove Reset = 재설정 Resize = 크기 조정 Retry = 재시도 @@ -528,8 +530,7 @@ Overlay Information = 오버레이 정보 Partial Stretch = 부분 늘이기 Percent of FPS = FPS 비율 Performance = 성능 -Postprocessing effect = 후처리 효과 -Postprocessing Shader = 후처리 쉐이더 +Postprocessing shaders = 후처리 쉐이더 Recreate Activity = 활동 재생성 Render duplicate frames to 60hz = 중복 프레임을 60Hz로 렌더링 RenderDuplicateFrames Tip = 낮은 프레임 속도에서 실행되는 게임에서 프레임 속도를 더 부드럽게 만들 수 있습니다. @@ -1055,6 +1056,7 @@ CPU Name = 이름 D3DCompiler Version = D3D컴파일러 버전 Debug = 디버그 Debugger Present = 디버거 탐지 +Depth buffer format = Depth buffer format Device Info = 장치 정보 Directories = 디렉토리 Display Information = 정보 표시 diff --git a/assets/lang/lo_LA.ini b/assets/lang/lo_LA.ini index 2773dd95f1..b1cf4ebcbc 100644 --- a/assets/lang/lo_LA.ini +++ b/assets/lang/lo_LA.ini @@ -184,7 +184,6 @@ Pause = &ຢຸດຊົ່ວຄາວ Pause When Not Focused = &ຢຸດຊົ່ວຄາວເມື່ອບໍ່ໄດ້ຫຼິ້ນ Portrait = ແນວຕັ້ງ Portrait reversed = ກັບດ້ານແນວຕັ້ງ -Postprocessing Shader = &ຂະບວນການເຮັດວຽກໄລ່ປັບເສດແສງສີ PPSSPP Forums = &ຟໍຣຳ PPSSPP Record = ການບັນທຶກ Record Audio = ບັນທຶກສຽງ @@ -314,6 +313,8 @@ Load completed = ໂຫຼດຂໍ້ມູນສຳເລັດ Loading = ກຳລັງໂຫຼດ\nກະລຸນາລໍຖ້າ... LoadingFailed = ບໍ່ສາມາດໂຫຼດຂໍ້ມູນ. Move = ເຄື່ອນຍ້າຍ +Move Down = Move Down +Move Up = Move Up Network Connection = ການເຊື່ອມຕໍ່ເຄື່ອຂ່າຍ NEW DATA = ຂໍ້ມູນໃໝ່ No = ບໍ່ແມ່ນ @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = ຕົກລົງ Old savedata detected = ກວດພົບຂໍ້ມູນເຊບເກົ່າ Options = ໂຕເລືອກ +Remove = Remove Reset = ຕັ້ງຄ່າໃໝ່ Resize = ປັບຂະໜາດ Retry = ລອງໃໝ່ອີກຄັ້ງ @@ -528,8 +530,7 @@ Overlay Information = ການສະແດງຂໍ້ມູນຊ້ອນທ Partial Stretch = ແນວຕັ້ງດຶງເຕັມຈໍ Percent of FPS = Percent of FPS Performance = ປະສິດທິພາບ -Postprocessing effect = Postprocessing effects -Postprocessing Shader = ຂະບວນການເຮັດວຽກໄລ່ປັບເສດສີ +Postprocessing shaders = ຂະບວນການເຮັດວຽກໄລ່ປັບເສດສີ Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/lt-LT.ini b/assets/lang/lt-LT.ini index d7f0439ec5..2a64d882e3 100644 --- a/assets/lang/lt-LT.ini +++ b/assets/lang/lt-LT.ini @@ -184,7 +184,6 @@ Pause = &Pauzė Pause When Not Focused = &Stabdyti kai nefokusuota Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forumai Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Krovimas baigtas. Loading = Kraunama\nPrašome palaukti... LoadingFailed = Neįmanoma krauti duomenų. Move = Perkelti +Move Down = Move Down +Move Up = Move Up Network Connection = Interneto tinklas NEW DATA = NAUJI DUOMENYS No = Ne @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = Gerai Old savedata detected = Aptikti seniau išsaugoti duomenys Options = Options +Remove = Remove Reset = Perkrauti Resize = Perkeisti dydį Retry = Pabandyti dar kartą @@ -528,8 +530,7 @@ Overlay Information = Užkadrinė informacija Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Greitis -Postprocessing effect = Postprocessing effects -Postprocessing Shader = "Įdėjiniminio" krovimo "šešėliai" (FX) +Postprocessing shaders = "Įdėjiniminio" krovimo "šešėliai" (FX) Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/ms_MY.ini b/assets/lang/ms_MY.ini index c0fcc500c2..4ecf0105ac 100644 --- a/assets/lang/ms_MY.ini +++ b/assets/lang/ms_MY.ini @@ -184,7 +184,6 @@ Pause = &Jeda Pause When Not Focused = &Jeda ketika tidak difokus Portrait = Portrait Portrait reversed = Portrait songsang -Postprocessing Shader = Shader pasc&apemprosesan PPSSPP Forums = PPSSPP &Forum Record = &Rakam Record Audio = Rakam &audio @@ -314,6 +313,8 @@ Load completed = Memuat selesai. Loading = Memuat\nSila tunggu... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = DATA BAHARU No = Tidak @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Mula semula Resize = Resize Retry = Cuba semula @@ -528,8 +530,7 @@ Overlay Information = Maklumat pertindihan Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Prestasi -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Pascapemprosesan Shader +Postprocessing shaders = Pascapemprosesan Shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/nl_NL.ini b/assets/lang/nl_NL.ini index 4691e9eddd..cea29bbbc5 100644 --- a/assets/lang/nl_NL.ini +++ b/assets/lang/nl_NL.ini @@ -184,7 +184,6 @@ Pause = &Pauzeren Pause When Not Focused = &Pauzeren wanneer venster inactief is Portrait = Portret Portrait reversed = Omgekeerd portret -Postprocessing Shader = &Nabewerkingsshader PPSSPP Forums = &PPSSPP-forum Record = Opnemen Record Audio = Audio opnemen @@ -314,6 +313,8 @@ Load completed = Het laden is voltooid. Loading = Bezig met laden...\nEen ogenblik geduld. LoadingFailed = Kan de data niet laden. Move = Slepen +Move Down = Move Down +Move Up = Move Up Network Connection = Netwerkverbinding NEW DATA = NIEUWE DATA No = Nee @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Oude savedata gedetecteerd Options = Opties +Remove = Remove Reset = Herstellen Resize = Schalen Retry = Opnieuw @@ -528,8 +530,7 @@ Overlay Information = Informatie op het scherm Partial Stretch = Gedeeltelijk uitrekken Percent of FPS = Percent of FPS Performance = Prestaties -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Nabewerkingsshader +Postprocessing shaders = Nabewerkingsshaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Naam D3DCompiler Version = D3DCompiler version Debug = Fouten opsporen Debugger Present = Foutopsporing aanwezig +Depth buffer format = Depth buffer format Device Info = Apparaatinformatie Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/no_NO.ini b/assets/lang/no_NO.ini index 4835560145..d0808c29b7 100644 --- a/assets/lang/no_NO.ini +++ b/assets/lang/no_NO.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Ferdig lastet. Loading = Laster\nVent litt... LoadingFailed = Unable to load data. Move = Move +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = NEW DATA No = Nei @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Old savedata detected Options = Options +Remove = Remove Reset = Reset Resize = Resize Retry = Retry @@ -528,8 +530,7 @@ Overlay Information = Overlay information Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/pl_PL.ini b/assets/lang/pl_PL.ini index 8dd0476756..b01d9e8770 100644 --- a/assets/lang/pl_PL.ini +++ b/assets/lang/pl_PL.ini @@ -184,7 +184,6 @@ Pause = Pauza Pause When Not Focused = Pauzuj, gdy okno nieaktywne Portrait = Pionowo Portrait reversed = Odwrócone pionowo -Postprocessing Shader = Efekty wizualne shaderów PPSSPP Forums = Forum PPSSPP Record = &Nagrywaj Record Audio = Nagrywaj &dźwięk @@ -314,6 +313,8 @@ Load completed = Ładowanie zakończone. Loading = Ładowanie\nProszę czekać... LoadingFailed = Nie można wczytać danych. Move = Przenieś +Move Down = Move Down +Move Up = Move Up Network Connection = Połączenie sieciowe NEW DATA = NOWE DANE No = Nie @@ -321,6 +322,7 @@ ObtainingIP = Uzyskiwanie adresu IP.\nProszę czekać... OK = OK Old savedata detected = Wykryto stary zapis gry Options = Opcje +Remove = Remove Reset = Resetuj Resize = Przeskaluj Retry = Spróbuj ponownie @@ -528,8 +530,7 @@ Overlay Information = Nakładka informacyjna Partial Stretch = Częściowe rozciągnięcie Percent of FPS = Procent FPS Performance = Wydajność -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Efekty wizualne shaderów +Postprocessing shaders = Efekty wizualne shaderów Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Nazwa D3DCompiler Version = Wersja D3DCompiler Debug = Debug Debugger Present = Debugger obecny +Depth buffer format = Depth buffer format Device Info = Inf. o urządzeniu Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/pt_BR.ini b/assets/lang/pt_BR.ini index 0cbb4a0b42..c58d1353b7 100644 --- a/assets/lang/pt_BR.ini +++ b/assets/lang/pt_BR.ini @@ -149,7 +149,7 @@ Refresh Rate = Taxa de atualização About PPSSPP... = &Sobre o PPSSPP... Auto = &Auto Auto Max Quality = Auto-maximizar a &qualidade -Backend = Backend de &renderização (Reinicia o PPSSPP) +Backend = Backend da &renderização (Reinicia o PPSSPP) Bicubic = &Bi-cúbico Break = Parar Break on Load = Parar ao carregar @@ -159,11 +159,11 @@ Debugging = &Debug Deposterize = &Deposterizar Direct3D9 = Direct3D &9 Direct3D11 = Direct3D &11 -Disassembly = &Disassembly... +Disassembly = &Fazer Disassembly... Discord = Discord -Display Layout && Effects = Exibir o editor do esquema... +Display Layout && Effects = Exibir esquema && efeitos... Display Rotation = Rotação da exibição -Dump Next Frame to Log = D&umpar o frame seguinte no log +Dump Next Frame to Log = D&umpar o frame seguinte no registro Emulation = &Emulação Enable Cheats = Ativar &trapaças Enable Sound = Ativar s&om @@ -188,7 +188,7 @@ Landscape reversed = Paisagem invertida Language... = Id&ioma... Linear = &Linear Load = &Carregar... -Load .sym File... = Carreg&ar arquivo .sym +Load .sym File... = Carreg&ar arquivo .sym... Load Map File... = Carregar &arquivo do mapa... Load State = C&arregar o state Load State File... = &Carregar arquivo do state... @@ -196,7 +196,7 @@ Log Console = &Console dos logs Memory View... = Visualização da &memória... More Settings... = &Mais configurações... Nearest = &Mais próximo -Skip Buffer Effects = &Ignorar efeitos do buffer (sem buffer, mais rápido) +Skip Buffer Effects = &Ignorar efeitos do buffer Off = &Desligado Open Chat = Abrir Bate-Papo Open Directory... = Abrir &diretório... @@ -208,7 +208,6 @@ Pause = &Pausar Pause When Not Focused = &Pausar quando não focado Portrait = Retrato Portrait reversed = Retrato invertido -Postprocessing Shader = Shader de pós-processamento PPSSPP Forums = Fórums do &PPSSPP Record = &Gravar Record Audio = Gravar &áudio @@ -254,31 +253,31 @@ Current = Atual Dev Tools = Ferramentas de desenvolvimento DevMenu = Menu do DEV Disabled JIT functionality = Funcionalidade do JIT desativada -Draw Frametimes Graph = Desenhar gráfico dos tempos dos frames -Dump Decrypted Eboot = Dumpar EBOOT.BIN decriptado no boot do jogo -Dump next frame to log = Dumpa o próximo frame no log +Draw Frametimes Graph = Desenhar o gráfico dos tempos dos frames +Dump Decrypted Eboot = Dumpar o EBOOT.BIN decriptado na inicialização do jogo +Dump next frame to log = Dumpar o frame seguinte no registro Enable driver bug workarounds = Ativar soluções alternativas pros bugs dos drivers -Enable Logging = Ativar log do debug +Enable Logging = Ativar o registro do debug Enter address = Inserir endereço FPU = FPU Framedump tests = Testes dos dumps dos frames Frame Profiler = Analista dos frames GPU Driver Test = Teste do driver da GPU GPU Profile = Perfil da GPU -GPU log profiler = Criador do Perfil do Registro da GPU +GPU log profiler = Criador do perfil do registro da GPU Jit Compare = Comparar JIT JIT debug tools = Ferramentas de debug do JIT -Log Dropped Frame Statistics = Pôr no log as estátisticas da queda dos frames -Log Level = Nível do log -Log View = Visualização do log -Logging Channels = Canais do log +Log Dropped Frame Statistics = Pôr no registro as estátisticas da queda dos frames +Log Level = Nível do registro +Log View = Visualização do registro +Logging Channels = Canais do registro Next = Próximo No block = Nenhum bloco Prev = Anterior Random = Aleatório Replace textures = Substituir texturas Reset = Resetar -Reset limited logging = Resetar o log limitado +Reset limited logging = Resetar o registro limitado RestoreDefaultSettings = Você tem certeza que você quer restaurar todas as configurações de volta aos padrões delas?\nAs configurações do mapeamento dos controles não são mudadas.\nVocê não pode desfazer isto.\nPor favor reinicie o PPSSPP para as mudanças terem efeito. RestoreGameDefaultSettings = Você tem certeza que você quer restaurar as configurações específicas do jogo\nde volta para os padrões do PPSSPP? Resume = Resumo @@ -338,6 +337,8 @@ Load completed = Carregamento completado. Loading = Carregando\nPor favor espere... LoadingFailed = Incapaz de carregar os dados. Move = Mover +Move Down = Move Down +Move Up = Move Up Network Connection = Conexão de rede NEW DATA = NOVOS DADOS No = Não @@ -345,6 +346,7 @@ ObtainingIP = Obtendo endereço de IP.\nPor favor espere... OK = Ok Old savedata detected = Dados antigos do save detectados Options = Opções +Remove = Remove Reset = Resetar Resize = Redimensionar Retry = Tentar de novo @@ -480,7 +482,7 @@ Aggressive = Agressivo Alternative Speed = Velocidade alternativa (em %, 0 = ilimitada) Alternative Speed 2 = Velocidade alternativa 2 (em %, 0 = ilimitada) Anisotropic Filtering = Filtragem anisotrópica -Aspect Ratio = Aspect Ratio +Aspect Ratio = Proporção do Aspecto Auto = Auto Auto (1:1) = Auto (1:1) Auto (same as Rendering) = Auto (a mesma que a da resolução de renderização) @@ -490,6 +492,7 @@ Auto Scaling = Auto-redimensionamento Backend = Backend Balanced = Balanceado Bicubic = Bi-cúbico +GPUReadbackRequired = Aviso: Este jogo requer "Ignorar Leituras da GPU" pra ser configurado como Desligado. Both = Ambos Buffer graphics commands (faster, input lag) = Buffer dos comandos dos gráficos (mais rápido, atraso na entrada dos dados) BufferedRenderingRequired = Aviso: Este jogo requer que o "modo de renderização" esteja definido "com buffer". @@ -500,7 +503,7 @@ Cardboard Screen X Shift = Deslocamento do X (em % do espaço vazio) Cardboard Screen Y Shift = Deslocamento do Y (em % do espaço vazio) Cardboard VR Settings = Configurações do Google VR Cardboard Cheats = Trapaças -CPU Core = Core da CPU +CPU Core = Núcleo da CPU Debugging = Debugging DefaultCPUClockRequired = Aviso: Este jogo requer que o clock da CPU esteja definido como padrão. Deposterize = Deposterizar @@ -509,7 +512,7 @@ Device = Dispositivo Direct3D 9 = Direct3D 9 Direct3D 11 = Direct3D 11 Disabled = Desativado -Display Layout && Effects = Exibe o editor dos esquemas +Display Layout && Effects = Exibir esquema && efeitos Display Resolution (HW scaler) = Resolução da tela (Dimensionador do hardware) Enable Cardboard VR = Ativa o VR Cardboard FPS = FPS @@ -517,8 +520,7 @@ Frame Rate Control = Controle da taxa dos frames Frame Skipping = Pulo dos frames Frame Skipping Type = Tipo de pulo dos frames FullScreen = Tela cheia -Geometry shader culling = Geometry shader culling -GPUReadbackRequired = Warning: This game requires "Skip GPU Readbacks" to be set to Off. +Geometry shader culling = Abate do shader da geometria Hack Settings = Configurações dos hacks (pode causar erros gráficos) Hardware Tessellation = Tesselação por hardware Hardware Transform = Transformação por hardware @@ -543,7 +545,7 @@ Must Restart = Você deve reiniciar o PPSSPP pra esta mudança ter efeito. Native device resolution = Resolução nativa do dispositivo Nearest = Mais próximo No buffer = Sem buffer -Skip Buffer Effects = Ignorar efeitos do buffer (sem buffer, mais rápido) +Skip Buffer Effects = Ignorar efeitos do buffer None = Nenhum Number of Frames = Número de frames Off = Desligado @@ -552,8 +554,7 @@ Overlay Information = Informações da sobreposição Partial Stretch = Esticamento parcial Percent of FPS = Porcentagem dos FPS Performance = Performance -Postprocessing effect = Efeitos de pós-processamento -Postprocessing Shader = Shader de pós-processamento +Postprocessing shaders = Shaders de pós-processamento Recreate Activity = Recriar atividade Render duplicate frames to 60hz = Renderizar frames duplicados a 60 Hz RenderDuplicateFrames Tip = Pode tornar a taxa dos frames mais suave em jogos que executam em taxas de frames menores @@ -565,15 +566,15 @@ Safe = Seguro Screen Scaling Filter = Filtro do dimensionamento da tela Show Debug Statistics = Mostrar estatísticas do debug Show FPS Counter = Mostrar contador de FPS -Skip GPU Readbacks = Skip GPU Readbacks +Skip GPU Readbacks = Ignorar Leituras da GPU Software Rendering = Renderização por software (lento) Software Skinning = Skinning via software SoftwareSkinning Tip = Combina os desenhos dos modelos de skinning na CPU, mais rápido na maioria dos jogos Speed = Velocidade -Speed Hacks = Speed Hacks (pode causar erros gráficos) -Stereo display shader = Stereo display shader -Stereo rendering = Stereo rendering -Stretch = Esticamento +Speed Hacks = Hacks de Velocidade (podem causar erros de renderização!) +Stereo display shader = Shader de exbição do estéreo +Stereo rendering = Renderização do estéreo +Stretch = Esticar Texture Filter = Filtragem das texturas Texture Filtering = Filtragem das texturas Texture Scaling = Dimensionamento das texturas @@ -587,7 +588,7 @@ Upscale Type = Tipo de ampliação UpscaleLevel Tip = Pesado pra CPU - alguns dimensionamentos podem ser atrasados pra evitar travamentos Use all displays = Usar todas as telas Vertex Cache = Cache do vértice -VertexCache Tip = Mais rápido, mas pode causar tremulação temporária +VertexCache Tip = Mais rápido mas pode causar tremulação temporária VSync = VSync Vulkan = Vulkan Window Size = Tamanho da janela @@ -621,7 +622,7 @@ Browse = Procurar... Buy PPSSPP Gold = Comprar o PPSSPP Gold Choose folder = Escolher pasta Credits = Créditos -PPSSPP Homebrew Store = Armazém dos Homebrews do PPSSPP +PPSSPP Homebrew Store = Loja dos Homebrews do PPSSPP Exit = Sair Game Settings = Configurações Games = Jogos @@ -744,9 +745,9 @@ Bottom Right = A direita do rodapé Center Left = Centralizar a esquerda Center Right = Centralizar a direita Change Mac Address = Mudar o endereço do MAC +ChangeMacSaveConfirm = Gerar um novo endereço pro MAC? +ChangeMacSaveWarning = Alguns jogos verificam o endereço do MAC quando carregam os dados do save então isto pode quebrar os saves antigos. Change proAdhocServer Address = Mudar o endereço de IP do servidor Ad Hoc PRO (localhost = múltiplas instâncias) -ChangeMacSaveConfirm = Generate a new MAC address? -ChangeMacSaveWarning = Some games verify the MAC address when loading savedata, so this may break old saves. Chat = Bate-papo Chat Button Position = Posição do botão de bate-papo Chat Here = Bata-papo aqui @@ -827,13 +828,13 @@ Bloom = Bloom Brightness = Brilho Cartoon = Cartoon ColorCorrection = Correção das cores -ColorPreservation = Color preservation +ColorPreservation = Preservação das cores Contrast = Contraste CRT = Scanlines do CRT FXAA = Anti-aliasing do FXAA Gamma = Gama Grayscale = Tons de cinza -GreenLevel = GreenLevel +GreenLevel = Nível verde Intensity = Intensidade InverseColors = Cores invertidas Natural = Cores naturais @@ -841,11 +842,11 @@ NaturalA = Cores naturais (sem borrão) Off = Desligado Power = Energia PSPColor = Cor do PSP -RedBlue = Red/Blue glasses +RedBlue = Óculos Vermelhos/Azuis Saturation = Saturação Scanlines = Scanlines (CRT) Sharpen = Aprimorado -SideBySide = Side by side (SBS) +SideBySide = Lado a lado (SBS) SSAA(Gauss) = Super-amostragem do AA (Gauss) Tex4xBRZ = 4xBRZ TexMMPX = MMPX @@ -1059,6 +1060,7 @@ CPU Name = Nome D3DCompiler Version = Versão do compilador D3D Debug = Debug Debugger Present = Debugger presente +Depth buffer format = Depth buffer format Device Info = Informação do dispositivo Directories = Diretórios Display Information = Informação da tela @@ -1110,8 +1112,6 @@ AVI Dump started. = Dump do AVI iniciado AVI Dump stopped. = Dump do AVI parado Cache ISO in RAM = Pôr a ISO inteira na RAM Change CPU Clock = Mudar o clock da CPU do PSP emulado (instável) -Game crashed = Game crashed -Language = Idioma Memory Stick folder = Pasta do cartão de memória Memory Stick size = Tamanho do cartão de memória Change Nickname = Mudar apelido @@ -1144,6 +1144,7 @@ Fast Memory = Memória rápida (instável) Floating symbols = Símbolos flutuantes Force real clock sync (slower, less lag) = Forçar sincronização com o relógio real (mais lento, menos atrasos) frames, 0:off = frames, 0 = Desligado +Game crashed = O jogo teve um crash Games list settings = Configurações da lista de jogos General = Geral Grid icon size = Tamanho do ícone da grade @@ -1154,6 +1155,7 @@ Increase size = Aumentar tamanho Interpreter = Interpretador IO timing method = Método de cronometragem da E/S IR Interpreter = Interpretador do IR +Language = Idioma Memory Stick Folder = Pasta do cartão de memória Memory Stick inserted = Cartão de memória inserido MHz, 0:default = MHz, 0 = padrão diff --git a/assets/lang/pt_PT.ini b/assets/lang/pt_PT.ini index 678779d5b1..b5d98f0685 100644 --- a/assets/lang/pt_PT.ini +++ b/assets/lang/pt_PT.ini @@ -208,7 +208,6 @@ Pause = &Pausar Pause When Not Focused = &Pausar quando não focado Portrait = Retrato Portrait reversed = Retrato invertido -Postprocessing Shader = Shader de Pós-Processamento PPSSPP Forums = Fórums do &PPSSPP Record = &Gravar Record Audio = Gravar &Áudio @@ -338,6 +337,8 @@ Load completed = Carregamento completado. Loading = Carregando\nPor favor espere... LoadingFailed = Incapaz de carregar os dados. Move = Mover +Move Down = Move Down +Move Up = Move Up Network Connection = Conexão de rede NEW DATA = NOVOS DADOS No = Não @@ -345,6 +346,7 @@ ObtainingIP = Obtendo o Endereço de IP.\nPor favor espere... OK = Ok Old savedata detected = Dados antigos do save detectados Options = Opções +Remove = Remove Reset = Reiniciar Resize = Redimensionar Retry = Tentar de novo @@ -552,8 +554,7 @@ Overlay Information = Informações da sobreposição Partial Stretch = Esticamento Parcial Percent of FPS = Percentagem dos FPS Performance = Performance -Postprocessing effect = Efeitos de Pós-Processamento -Postprocessing Shader = Shader de Pós-Processamento +Postprocessing shaders = Shaders de Pós-Processamento Recreate Activity = Recriar atividade Render duplicate frames to 60hz = Renderizar quadros duplicados a 60 Hz RenderDuplicateFrames Tip = Pode tornar a taxa dos quadros mais suave em jogos que executam em taxas de quadros menores @@ -1059,6 +1060,7 @@ CPU Name = Nome D3DCompiler Version = Versão do compilador D3D Debug = Debug Debugger Present = Depurador presente +Depth buffer format = Depth buffer format Device Info = Informação do dispositivo Directories = Diretórios Display Information = Informação da tela diff --git a/assets/lang/ro_RO.ini b/assets/lang/ro_RO.ini index 95e3d6bb7f..135170999a 100644 --- a/assets/lang/ro_RO.ini +++ b/assets/lang/ro_RO.ini @@ -184,7 +184,6 @@ Pause = &Pause Pause When Not Focused = &Pause When Not Focused Portrait = Portrait Portrait reversed = Portrait reversed -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP &Forums Record = &Record Record Audio = Record &audio @@ -314,6 +313,8 @@ Load completed = Încărcare Completă Loading = Se încarcă\nAșteptați... LoadingFailed = Nu s-au putut încărca datele. Move = Mișcă +Move Down = Move Down +Move Up = Move Up Network Connection = Conexiune la rețea NEW DATA = DATE NOI No = Nu @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Date vechi salvate detectate Options = Options +Remove = Remove Reset = Resetare Resize = Modificare marime Retry = Reîncearcă @@ -528,8 +530,7 @@ Overlay Information = Informație suprapusă Partial Stretch = Partial stretch Percent of FPS = Percent of FPS Performance = Performanță -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Shader postprocesare +Postprocessing shaders = Shaders postprocesare Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/ru_RU.ini b/assets/lang/ru_RU.ini index 4537365dd0..318d699e06 100644 --- a/assets/lang/ru_RU.ini +++ b/assets/lang/ru_RU.ini @@ -184,7 +184,6 @@ Pause = &Пауза Pause When Not Focused = &Пауза, когда окно не в фокусе Portrait = Портретная Portrait reversed = Портретная (перевернутая) -Postprocessing Shader = &Постобработка (шейдер) PPSSPP Forums = &Форум PPSSPP Record = &Запись Record Audio = Запись &звука @@ -314,6 +313,8 @@ Load completed = Загрузка завершена Loading = Загрузка\nПожалуйста, подождите... LoadingFailed = Невозможно загрузить даные. Move = Положение +Move Down = Move Down +Move Up = Move Up Network Connection = Сетевое подключение NEW DATA = Новое сохранение No = Нет @@ -321,6 +322,7 @@ ObtainingIP = Получение IP-адреса.\nПожалуйста, под OK = OK Old savedata detected = Старый формат сохранений обнаружен Options = Опции +Remove = Remove Reset = Сбросить Resize = Размер Retry = Снова @@ -528,8 +530,7 @@ Overlay Information = Информация в оверлее Partial Stretch = Частичное растягивание Percent of FPS = Процент от FPS Performance = Производительность -Postprocessing effect = Эффекты постобработки -Postprocessing Shader = Постобработка (шейдер) +Postprocessing shaders = Постобработка (шейдер) Recreate Activity = Создать активность заново Render duplicate frames to 60hz = Рендеринг дублирующихся кадров до 60 Гц RenderDuplicateFrames Tip = Может сгладить частоту кадров в тех играх, где она низкая diff --git a/assets/lang/sv_SE.ini b/assets/lang/sv_SE.ini index 8b0532f46e..a1b55bc588 100644 --- a/assets/lang/sv_SE.ini +++ b/assets/lang/sv_SE.ini @@ -1,7 +1,7 @@ [Audio] Alternate speed volume = Volym vid alternativ hastighet Audio backend = Uppspelningsteknik (ändring kräver omstart!) -Audio Error = Audio Error +Audio Error = Ljudfel AudioBufferingForBluetooth = Bluetooth-friendly buffer (slower) Auto = Auto Device = Enhet @@ -31,12 +31,12 @@ Auto-rotation speed = Auto-rotation speed Auto-switch = Auto-switch Base tilt position = Base tilt position Binds = Binds -Button Binding = Button Binding +Button Binding = Knapp-bindning Button Opacity = Knappgenomskinlighet Button style = Knappstil Calibrate Analog Stick = Kalibrera analog styrspak Calibrate D-Pad = Kalibrera D-pad -Calibrated = Calibrated +Calibrated = Kalibrerad Calibration = Kalibrering Circular stick input = Circular stick input Classic = Klassisk @@ -49,13 +49,13 @@ Customize tilt = Anpassa tilt... D-PAD = D-Pad Deadzone radius = Deadzone-radie Disable D-Pad diagonals (4-way touch) = Slå av D-Pad-diagonaler (4-vägs touch) -Disable diagonal input = Disable diagonal input +Disable diagonal input = Blockera diagonal input Double tap = Double tap -Enable gesture control = Enable gesture control +Enable gesture control = Get-kontroll Enable standard shortcut keys = Enable standard shortcut keys Gesture = Gesture -Gesture mapping = Gesture mapping -Glowing borders = Glowing borders +Gesture mapping = Gest-mappning +Glowing borders = Lysande kanter HapticFeedback = Haptic feedback (vibration) Hide touch analog stick background circle = Hide touch analog stick background circle Icon = Icon @@ -83,7 +83,7 @@ Portrait Reversed = Porträtt omvänt PSP Action Buttons = PSP action-knappar Raw input = Raw input Repeat mode = Repeat mode -Reset to defaults = Reset to defaults +Reset to defaults = Återställ till standardvärden Screen aligned to ground = Screen aligned to ground Screen at right angle to ground = Screen at right angle to ground Screen Rotation = Skärmrotation @@ -93,8 +93,8 @@ Sensitivity = Känslighet Shape = Shape Show Touch Pause Menu Button = Show Touch Pause Menu Button Swipe = Swipe -Swipe sensitivity = Swipe sensitivity -Swipe smoothing = Swipe smoothing +Swipe sensitivity = Swipe-känslighet +Swipe smoothing = Swipe-utjämning Thin borders = Tunna kanter Tilt Base Radius = Tilt base radius Tilt Input Type = Lutningstyp @@ -139,7 +139,7 @@ Disassembly = Disassemblera Discord = Discord Display Layout && Effects = Skärmlayout && effekter... Display Rotation = Skärmrotation -Dump Next Frame to Log = Dump Next Frame to Log +Dump Next Frame to Log = Dumpa nästa frame till loggen Emulation = Emulering Enable Cheats = Fusk Enable Sound = Ljud @@ -147,7 +147,7 @@ Exit = Avsluta Extract File... = Extrahera fil... File = Arkiv Frame Skipping = Frameskipping -Frame Skipping Type = Frame skipping type +Frame Skipping Type = Typ av frame-skippning Fullscreen = Fullskärm Game Settings = Inställningar GE Debugger... = GE Debugger... @@ -172,9 +172,9 @@ Log Console = Loggkonsol Memory View... = Minnesvy... More Settings... = Mer inställningar... Nearest = Nearest -Skip Buffer Effects = &Skip buffer effects +Skip Buffer Effects = &Skippa buffereffekter Off = Off -Open Chat = Open Chat +Open Chat = Öppna chat Open Directory... = Öppna mapp... Open from MS:/PSP/GAME... = Öppna från MS:/PSP/GAME... Open Memory Stick = Öppna Memory Stick @@ -184,7 +184,6 @@ Pause = Paus Pause When Not Focused = Pausa vid tappat fokus Portrait = Porträtt Portrait reversed = Porträtt omvänt -Postprocessing Shader = Postprocessing Shader PPSSPP Forums = PPSSPP-forum Record = &Record Record Audio = Record &audio @@ -229,11 +228,11 @@ Create/Open textures.ini file for current game = Create/Open textures.ini file f Current = Aktuellt Dev Tools = Development tools DevMenu = DevMenu -Disabled JIT functionality = Disabled JIT functionality -Draw Frametimes Graph = Draw frametimes graph +Disabled JIT functionality = Avstängd JIT-funktionalitet +Draw Frametimes Graph = Rita upp graf över frame-tider Dump Decrypted Eboot = Dumpa decrypterad EBOOT.BIN när spelet startar Dump next frame to log = Dumpa nästa frame till log -Enable driver bug workarounds = Enable driver bug workarounds +Enable driver bug workarounds = Tillåt workarounds för drivrutins-buggar Enable Logging = Debugloggning Enter address = Address FPU = FPU @@ -269,15 +268,15 @@ Texture ini file created = Texture ini file created Texture Replacement = Ersätt texturer Toggle Audio Debug = Toggla audio debug Toggle Freeze = Toggla freeze -Touchscreen Test = Touchscreen test +Touchscreen Test = Touchskärm-test VFPU = VFPU [Dialog] * PSP res = * PSP res -Active = Active +Active = Aktiv Back = Tillbaka Cancel = Avbryt -Center = Center +Center = Centrera ChangingGPUBackends = PPSSPP måste starta om för att byta GPU-backend. Vill du starta om nu? ChangingInflightFrames = Changing graphics command buffering requires PPSSPP to restart. Restart now? Channel: = Channel: @@ -285,12 +284,12 @@ Choose PPSSPP save folder = Välj folder att spara i Confirm Overwrite = Vill du skriva över datan? Confirm Save = Vill du spara denna data? ConfirmLoad = Ladda denna data? -ConnectingAP = Connecting to the access point.\nPlease wait... -ConnectingPleaseWait = Connecting.\nPlease wait... -ConnectionName = Connection name -Corrupted Data = Corrupted data -Delete = Ta bort -Delete all = Ta bort allt +ConnectingAP = Kopplar upp till acceesspunkten.\nVänta... +ConnectingPleaseWait = Kopplar upp.\nVänta... +ConnectionName = Uppkopplingsnamn +Corrupted Data = Korrupt data +Delete = Radera +Delete all = Radera allt Delete completed = Borttaget. DeleteConfirm = All sparad data tas bort.\nÄr du säker på att du vill göra detta? DeleteConfirmAll = Vill du verkligen ta bort all\nsparad data för spelet? @@ -307,20 +306,23 @@ Filter = Filter Finish = Färdig GE Frame Dumps = GE Frame Dumps Grid = Grid -Inactive = Inactive -InternalError = An internal error has occurred. +Inactive = Inaktiv +InternalError = Ett internt fel har upptäckts. Load = Ladda Load completed = Laddat. Loading = Laddar\nVänta... LoadingFailed = Kunde inte ladda data. Move = Flytta +Move Down = Flytta ner +Move Up = Flytta upp Network Connection = Nätverksuppkoppling NEW DATA = NY DATA No = Nej ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK -Old savedata detected = Old savedata detected -Options = Options +Old savedata detected = Gammal savedata upptäckt +Options = Inställningar +Remove = Ta bort Reset = Återställ Resize = Ändra storlek Retry = Försök igen @@ -328,7 +330,7 @@ Save = Spara Save completed = Sparat. Saving = Sparar\nVänta... SavingFailed = Kunde inte spara data. -Search = Search +Search = Sök Select = Välj Shift = Skift Skip = Skip @@ -336,20 +338,20 @@ Snap = Snap Space = Mellanslag SSID = SSID Submit = Skicka -Supported = Supported +Supported = Stödd There is no data = Det finns ingen data. Toggle All = Vänd alla Toggle List = Toggle list -Unsupported = Unsupported +Unsupported = Stöds ej When you save, it will load on a PSP, but not an older PPSSPP = When you save, it will load on a PSP, but not an older PPSSPP When you save, it will not work on outdated PSP Firmware anymore = When you save, it will not work on outdated PSP firmware anymore Yes = Ja -Zoom = Zoom +Zoom = Zooma [Error] 7z file detected (Require 7-Zip) = file is compressed (7z).\nPlease decompress first (try 7-Zip or WinRAR). -A PSP game couldn't be found on the disc. = A PSP game couldn't be found on the disc. -Cannot boot ELF located outside mountRoot. = Cannot boot ELF located outside mountRoot. +A PSP game couldn't be found on the disc. = Kunde inte hitta ett PSP-spel på skivavbildningen. +Cannot boot ELF located outside mountRoot. = Kan inte boota en ELF som ligger utanför mountRoot. Could not save screenshot file = Misslyckades spara skärmdump. D3D9or11 = Direct3D 9? (or "no" for Direct3D 11) D3D11CompilerMissing = D3DCompiler_47.dll saknas. Installera, eller tryck Ja för att försöka igen med Direct3D 9 istället. @@ -372,7 +374,7 @@ GenericOpenGLError = Failed initializing graphics. Try upgrading your graphics d GenericVulkanError = Failed initializing graphics. Try upgrading your graphics drivers.\n\nWould you like to try switching to OpenGL?\n\nError message: InsufficientOpenGLDriver = Otillräckligt OpenGL-stöd detekterat!\n\nYour GPU reports that it does not support OpenGL 2.0. Would you like to try using DirectX instead?\n\nDirectX is currently compatible with less games, but on your GPU it may be the only choice.\n\nVisit the forums at https://forums.ppsspp.org for more information.\n\n Just a directory. = Endast en katalog. -Missing key = Missing key +Missing key = Nyckel saknas MsgErrorCode = Error code: MsgErrorSavedataDataBroken = Save data was corrupt. MsgErrorSavedataMSFull = Memory Stick full. Check your storage space. @@ -405,7 +407,7 @@ ZIP file detected (Require WINRAR) = file is compressed (ZIP).\nPlease decompres [Game] Asia = Asia -Calculate CRC = Calculate CRC +Calculate CRC = Räkna ut CRC ConfirmDelete = Ta bort Create Game Config = Skapa spelconfig Create Shortcut = Skapa genväg @@ -490,11 +492,11 @@ Display Resolution (HW scaler) = Skärmupplösning (HW scaler) Enable Cardboard VR = Enable Cardboard VR FPS = FPS Frame Rate Control = Framerate-kontroll -Frame Skipping = Frameskipping +Frame Skipping = Frame-skipping Frame Skipping Type = Frame skipping type FullScreen = Fullskärm Geometry shader culling = Geoshader-klippning -GPUReadbackRequired = Warning: This game requires "Skip GPU Readbacks" to be set to Off. +GPUReadbackRequired = Varning: Detta spel kräver att 'Skippa dataläsningar från GPU:n' är avstängt. Hack Settings = Hack-inställningar (kan orsaka problem) Hardware Tessellation = Hårdvarutessellering Hardware Transform = Hårdvarutransform @@ -518,7 +520,7 @@ Mode = Mode Must Restart = Starta om PPSSPP för att ändringen ska få effekt. Native device resolution = Native device resolution Nearest = Närmast -No buffer = No buffer +No buffer = Ingen buffer Skip Buffer Effects = Skippa buffereffekter (snabbare, risk för fel) None = Inget Number of Frames = Antal frames @@ -528,14 +530,13 @@ Overlay Information = Overlay-information Partial Stretch = Partial stretch Percent of FPS = Procent av FPS Performance = Prestanda -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing-Shader +Postprocessing shaders = Postprocessing-Shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates Rendering Mode = Renderingsläge Rendering Resolution = Renderingsupplösning -RenderingMode NonBuffered Tip = Faster, but nothing may draw in some games +RenderingMode NonBuffered Tip = Snabbare, men grafik kan gå sönder Rotation = Rotation Safe = Safe Screen Scaling Filter = Skärmskalningsfilter @@ -549,7 +550,7 @@ Speed = Hastighet Speed Hacks = Speed-hacks (kan orsaka renderingsproblem) Stereo display shader = Stereo display shader Stereo rendering = Stereo-rendering -Stretch = Stretch +Stretch = Sträck ut Texture Filter = Texturfilter Texture Filtering = Texturfiltrering Texture Scaling = Texturskalning @@ -622,7 +623,7 @@ Audio = Ljud Controls = Kontroll Graphics = Grafik Networking = Nätverk -Search = Search +Search = Sök System = System Tools = Verktyg @@ -994,15 +995,15 @@ LoadStateWrongVersion = Misslyckades ladda state: Savestate is for an older vers norewind = No rewind save states available. Playing = Playing PressESC = Tryck ESC för att öppna pausemenyn. -replaceTextures_false = Textures no longer are being replaced. -replaceTextures_true = Texture replacement is enabled. +replaceTextures_false = Texturer ersätts inte längre. +replaceTextures_true = Textur-ersättning är igång. Save State Failed = Misslyckades spara state! Saved State = State sparat saveNewTextures_false = Texture saving was disabled. saveNewTextures_true = Textures will now be saved to your storage. -SpeedCustom2 = Speed: alternate 2 +SpeedCustom2 = Speed: alternativ 2 standard = Hastighet: standard -State load undone = State load undone +State load undone = State load ogjort Untitled PSP game = Untitled PSP game [Search] @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats @@ -1096,7 +1098,7 @@ Color Saturation = Färgmättnad Color Tint = Färgförskjutning Error: load undo state is from a different game = Error: load undo state is from a different game Failed to load state for load undo. Error in the file system. = Failed to load state for load undo. Error in the file system. -Floating symbols = Floating symbols +Floating symbols = Flytande symboler Game crashed = Game crashed Memory Stick folder = Memory Stick-mapp Memory Stick size = Memory Stick-storlek @@ -1139,7 +1141,7 @@ IO timing method = IO-timingsmetod IR Interpreter = IR interpreter Language = Språk Memory Stick Folder = Memory Stick-mapp -Memory Stick inserted = Memory Stick insatt +Memory Stick inserted = Memory Stick isatt MHz, 0:default = MHz, 0 = standard MMDDYYYY = MMDDYYYY Moving background = Rörlig bakgrund @@ -1180,7 +1182,7 @@ Sustained performance mode = Sustained performance mode Theme = Tema Time Format = Tidsformat UI = Användargränssnitt -UI background animation = UI background animation +UI background animation = Bakgrundsanimering UI Sound = Ljud i användargränssnittet undo %c = backup %c USB = USB @@ -1192,7 +1194,7 @@ Use X to confirm = Använd X för att bekräfta VersionCheck = Kolla efter nya versioner av PPSSPP WARNING: Android battery save mode is on = WARNING: Android battery save mode is On WARNING: Battery save mode is on = WARNING: Battery save mode is on -Waves = Waves +Waves = Vågor YYYYMMDD = YYYYMMDD [TextureShaders] diff --git a/assets/lang/tg_PH.ini b/assets/lang/tg_PH.ini index d649050859..260c8f3ec6 100644 --- a/assets/lang/tg_PH.ini +++ b/assets/lang/tg_PH.ini @@ -184,7 +184,6 @@ Pause = Pause Pause When Not Focused = Ihinto kapag hindi naka pokus Portrait = Patayo Portrait reversed = Pabaliktad na patayo -Postprocessing Shader = Postprocessing Shader PPSSPP Forums = PPSSPP Forums Record = Record Record Audio = Record audio @@ -314,6 +313,8 @@ Load completed = Kumpletong na-i load. Loading = Sandali lamang... LoadingFailed = Loading ng datos ay pumalya. Move = Galawin +Move Down = Move Down +Move Up = Move Up Network Connection = Network Connection NEW DATA = BAGONG DATOS No = Hindi @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = Sige Old savedata detected = Nahanap ang lumang savedata Options = Options +Remove = Remove Reset = Ibalik Resize = Resize Retry = Ulitin @@ -528,8 +530,7 @@ Overlay Information = Overlay na impormasyon Partial Stretch = Parsiyal na unatin Percent of FPS = Porsiyento ng FPS Performance = Performance -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Postprocessing shader +Postprocessing shaders = Postprocessing shaders Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Name D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Device info Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/th_TH.ini b/assets/lang/th_TH.ini index c287d70dd8..ace20b3246 100644 --- a/assets/lang/th_TH.ini +++ b/assets/lang/th_TH.ini @@ -184,7 +184,6 @@ Pause = หยุดชั่วคราว Pause When Not Focused = หยุดชั่วคราวเมื่อไม่ได้เล่น Portrait = แนวตั้ง Portrait reversed = แนวตั้งกลับด้าน -Postprocessing Shader = กระบวนการทำงานปรับเฉดแสงสี PPSSPP Forums = เว็บ PPSSPP Forums Record = การอัดบันทึก Record Audio = อัดบันทึกเสียง @@ -314,6 +313,8 @@ Load completed = โหลดข้อมูลสำเร็จ Loading = กำลังโหลด\nโปรดรอ... LoadingFailed = ไม่สามารถโหลดข้อมูลนี้ได้ Move = ย้าย +Move Down = Move Down +Move Up = Move Up Network Connection = การเชื่อมต่อเครือข่าย NEW DATA = ข้อมูลใหม่ No = ไม่ใช่ @@ -321,6 +322,7 @@ ObtainingIP = กำลังรับไอพี\nโปรดรอสัก OK = ตกลง Old savedata detected = ตรวจพบข้อมูลเซฟเก่า Options = ตัวเลือก +Remove = Remove Reset = ตั้งค่าใหม่ Resize = ขนาด Retry = ลองใหม่ @@ -528,8 +530,7 @@ Overlay Information = การแสดงข้อมูลซ้อนทั Partial Stretch = แนวตั้งดึงเต็มจอ Percent of FPS = อิงจากเปอร์เซ็นต์เฟรมต่อวิ Performance = ประสิทธิภาพ -Postprocessing effect = กระบวนการทำงานปรับเอฟเฟ็คท์ -Postprocessing Shader = กระบวนการทำงานปรับเฉดแสงสี +Postprocessing shaders = กระบวนการทำงานปรับเฉดแสงสี Recreate Activity = สร้างกิจกรรมใหม่ Render duplicate frames to 60hz = แสดงผลเฟรมซ้ำให้ถึง 60 เฮิร์ตซ RenderDuplicateFrames Tip = ช่วยให้ภาพดูลื่นตาขึ้น ในเกมที่ใช้เฟรมเรทต่ำ @@ -1042,6 +1043,7 @@ CPU Name = ชื่อหน่วยประมวลผลหลัก D3DCompiler Version = เวอร์ชั่นตัวคอมไพล์ของ D3D Debug = แก้ไขบั๊ก Debugger Present = ตัวช่วยแก้ไขบั๊ก +Depth buffer format = Depth buffer format Device Info = ข้อมูลอุปกรณ์ Directories = เส้นทางเก็บข้อมูล Display Color Formats = รูปแบบสีของหน้าจอแสดงผล diff --git a/assets/lang/tr_TR.ini b/assets/lang/tr_TR.ini index 415cbd1e91..a12dcd7f67 100644 --- a/assets/lang/tr_TR.ini +++ b/assets/lang/tr_TR.ini @@ -186,7 +186,6 @@ Pause = PPSSPP Menüsü Pause When Not Focused = &Başka programa geçildiğinde duraklat Portrait = Dikey Portrait reversed = Ters Dikey -Postprocessing Shader = Postprocessin&g Shader PPSSPP Forums = PPSSPP Forumları Record = Kayıt Record Audio = Ses Kaydet @@ -316,6 +315,8 @@ Load completed = Yükleme tamamlandı. Loading = Yükleniyor\nLütfen Bekleyin... LoadingFailed = Veri yüklenemedi. Move = Taşı +Move Down = Move Down +Move Up = Move Up Network Connection = Ağ Bağlantısı NEW DATA = YENİ VERİ No = Hayır @@ -323,6 +324,7 @@ ObtainingIP = IP adresi alınıyor.\nLütfen bekleyin... OK = Tamam Old savedata detected = Eski kayıt bulundu. Options = Ayarlar +Remove = Remove Reset = Sıfırla Resize = Yeniden Boyutlandır Retry = Yeniden Dene @@ -530,8 +532,7 @@ Overlay Information = Ek Bilgi Partial Stretch = Tam ekran (kısmi sünme) Percent of FPS = FPS yüzdesi Performance = Performans -Postprocessing effect = Postprocessing efektleri -Postprocessing Shader = Postprocessing gölgelendiricisi +Postprocessing shaders = Postprocessing gölgelendiricisi Recreate Activity = Recreate activity Render duplicate frames to 60hz = Yinelenen kareleri 60Hz'de işleyin RenderDuplicateFrames Tip = Daha düşük kare hızlarında çalışan oyunlarda kare hızını düzeltebilir @@ -1043,6 +1044,7 @@ CPU Name = Ad D3DCompiler Version = D3DCompiler sürümü Debug = Hata Ayıklama Debugger Present = Hata ayıklayıcı var +Depth buffer format = Depth buffer format Device Info = Cihaz bilgisi Directories = Dizinler Display Color Formats = Renk Biçimlerini Görüntüle diff --git a/assets/lang/uk_UA.ini b/assets/lang/uk_UA.ini index 1b6e6ec377..bd967631c1 100644 --- a/assets/lang/uk_UA.ini +++ b/assets/lang/uk_UA.ini @@ -184,7 +184,6 @@ Pause = &Пауза Pause When Not Focused = &Пауза коли вікно не в фокусі Portrait = Портретне Portrait reversed = Портретна (перевернуто) -Postprocessing Shader = &Подальша обробка (шейдер) PPSSPP Forums = &Форум PPSSPP Record = &Запис Record Audio = Запис &аудіо @@ -314,6 +313,8 @@ Load completed = Завантаження завершене Loading = Завантаження\nБудь ласка, зачекайте... LoadingFailed = Не вдалося завантажити дані. Move = Положення +Move Down = Move Down +Move Up = Move Up Network Connection = Підключення до мережі NEW DATA = Нове збереження No = Ні @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Виявлено старий формат збережень Options = Опції: +Remove = Remove Reset = Скинути Resize = Розмір Retry = Повторити @@ -528,8 +530,7 @@ Overlay Information = Інформація про накладення Partial Stretch = Часткове розтягнення Percent of FPS = Відсоток FPS Performance = Продуктивність -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Шейдери +Postprocessing shaders = &Подальша обробка (шейдер) Recreate Activity = Відтворити діяльність Render duplicate frames to 60hz = Відображення повторюваних кадрів до 60 Гц RenderDuplicateFrames Tip = Можна зробити більш плавний кадр в іграх, які працюють у нижчих кадрах @@ -1042,6 +1043,7 @@ CPU Name = Назва D3DCompiler Version = Версія D3DCompiler Debug = Налагодження Debugger Present = Присутній налагоджувач +Depth buffer format = Depth buffer format Device Info = Інформація про пристрій Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/vi_VN.ini b/assets/lang/vi_VN.ini index f459105a2f..b0788c4456 100644 --- a/assets/lang/vi_VN.ini +++ b/assets/lang/vi_VN.ini @@ -184,7 +184,6 @@ Pause = Tạm dừng Pause When Not Focused = Dừng trò chơi khi "ko tập trung" Portrait = Chiều dọc Portrait reversed = Chiều dọc đảo ngược -Postprocessing Shader = Xử lý hậu đổ bóng PPSSPP Forums = Diễn đàn PPSSPP Record = Ghi lại Record Audio = Ghi âm thanh @@ -314,6 +313,8 @@ Load completed = Đã load xong. Loading = Đang load\nXin đợi... LoadingFailed = Không thể load dữ liệu này. Move = Di chuyển +Move Down = Move Down +Move Up = Move Up Network Connection = Kết nối mạng NEW DATA = DỮ LIỆU MỚI No = Không @@ -321,6 +322,7 @@ ObtainingIP = Obtaining IP address.\nPlease wait... OK = OK Old savedata detected = Phát hiện dữ liệu cũ Options = Tùy chọn +Remove = Remove Reset = Mặc định Resize = Thay đổi kích thước Retry = Thử lại @@ -528,8 +530,7 @@ Overlay Information = Hiển thị thông tin trên màn hình Partial Stretch = Từng phần dãn ra Percent of FPS = Percent of FPS Performance = Hiệu năng -Postprocessing effect = Postprocessing effects -Postprocessing Shader = Xử lý hậu đổ bóng +Postprocessing shaders = Xử lý hậu đổ bóng Recreate Activity = Recreate activity Render duplicate frames to 60hz = Render duplicate frames to 60 Hz RenderDuplicateFrames Tip = Can make framerate smoother in games that run at lower framerates @@ -1042,6 +1043,7 @@ CPU Name = Tên D3DCompiler Version = D3DCompiler version Debug = Debug Debugger Present = Debugger present +Depth buffer format = Depth buffer format Device Info = Thông tin thiết bị Directories = Directories Display Color Formats = Display Color Formats diff --git a/assets/lang/zh_CN.ini b/assets/lang/zh_CN.ini index 2628aa563f..0fc0b4cf6a 100644 --- a/assets/lang/zh_CN.ini +++ b/assets/lang/zh_CN.ini @@ -184,7 +184,6 @@ Pause = 暂停 (&P) Pause When Not Focused = 后台运行时自动暂停 (&P) Portrait = 纵向 Portrait reversed = 纵向反转 -Postprocessing Shader = 后处理着色器 (&g) PPSSPP Forums = PPSSPP官方论坛 (&F) Record = 录制 (&R) Record Audio = 录制音频 (&A) @@ -314,6 +313,8 @@ Load completed = 已载入。 Loading = 载入中\n请稍候... LoadingFailed = 无法载入存档。 Move = 移动 +Move Down = Move Down +Move Up = Move Up Network Connection = 网络连接 NEW DATA = 新建存档 No = 否 @@ -321,6 +322,7 @@ ObtainingIP = 获取IP地址.\n请稍候... OK = 确定 Old savedata detected = 检测到旧版本的存档数据 Options = 选项 +Remove = Remove Reset = 重置 Resize = 调整大小 Retry = 重试 @@ -528,8 +530,7 @@ Overlay Information = 叠加信息 Partial Stretch = 部分拉伸 Percent of FPS = 帧率的百分比 Performance = 性能 -Postprocessing effect = 滤镜效果 -Postprocessing Shader = 后处理着色器 +Postprocessing shaders = 后处理着色器 Recreate Activity = 重建进程 Render duplicate frames to 60hz = 渲染重复帧至60Hz RenderDuplicateFrames Tip = 在较低帧率的游戏中可以使帧速率更平滑 @@ -1036,6 +1037,7 @@ CPU Name = CPU 名称 D3DCompiler Version = D3DCompiler版本 Debug = 调试 Debugger Present = 调试器已连接 +Depth buffer format = Depth buffer format Device Info = 设备信息 Directories = 路径 Display Color Formats = 显示颜色格式 diff --git a/assets/lang/zh_TW.ini b/assets/lang/zh_TW.ini index 2c5bda9581..1133d8adaa 100644 --- a/assets/lang/zh_TW.ini +++ b/assets/lang/zh_TW.ini @@ -184,7 +184,6 @@ Pause = 暫停 (&P) Pause When Not Focused = 未聚焦時暫停 (&P) Portrait = 直向 Portrait reversed = 直向反轉 -Postprocessing Shader = 後處理著色器 (&G) PPSSPP Forums = PPSSPP 論壇 (&F) Record = 錄製 (&R) Record Audio = 錄製音訊 (&A) @@ -314,6 +313,8 @@ Load completed = 載入完成 Loading = 正在載入\n請稍候… LoadingFailed = 無法載入資料 Move = 移動 +Move Down = Move Down +Move Up = Move Up Network Connection = 網路連線 NEW DATA = 新存檔 No = 否 @@ -321,6 +322,7 @@ ObtainingIP = 正在取得 IP 位址\n請稍候… OK = 確定 Old savedata detected = 偵測到舊版存檔資料 Options = 選項 +Remove = Remove Reset = 重設 Resize = 調整大小 Retry = 重試 @@ -528,8 +530,7 @@ Overlay Information = 覆疊資訊 Partial Stretch = 部分延展 Percent of FPS = FPS 百分比 Performance = 效能 -Postprocessing effect = 後處理效果 -Postprocessing Shader = 後處理著色器 +Postprocessing shaders = 後處理著色器 Recreate Activity = 重新建立活動 Render duplicate frames to 60hz = 轉譯重複影格至 60 Hz RenderDuplicateFrames Tip = 可以使以較低影格速率執行的遊戲更加順暢 @@ -1035,6 +1036,7 @@ CPU Name = CPU 名稱 D3DCompiler Version = D3DCompiler 版本 Debug = 偵錯 Debugger Present = 偵錯工具呈現 +Depth buffer format = Depth buffer format Device Info = 裝置資訊 Directories = 目錄 Display Information = 顯示器資訊 diff --git a/assets/ui_atlas.meta b/assets/ui_atlas.meta index a1d7df260c..88c386e491 100644 Binary files a/assets/ui_atlas.meta and b/assets/ui_atlas.meta differ diff --git a/assets/ui_atlas.zim b/assets/ui_atlas.zim index 5b8b17995c..465d54e6f0 100644 Binary files a/assets/ui_atlas.zim and b/assets/ui_atlas.zim differ diff --git a/ext/libzstd.vcxproj b/ext/libzstd.vcxproj index 7cd642f51c..68dadeded9 100644 --- a/ext/libzstd.vcxproj +++ b/ext/libzstd.vcxproj @@ -231,7 +231,7 @@ Level4 - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebug @@ -250,7 +250,7 @@ Level4 - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug true @@ -267,7 +267,7 @@ Level4 - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug true @@ -284,7 +284,7 @@ Level4 - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug true @@ -304,7 +304,7 @@ MaxSpeed true true - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false MultiThreaded true @@ -330,7 +330,7 @@ MaxSpeed true true - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false false MultiThreaded @@ -356,7 +356,7 @@ MaxSpeed true true - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false false MultiThreaded @@ -382,7 +382,7 @@ MaxSpeed true true - ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=5;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + ZSTD_MULTITHREAD=1;ZSTD_LEGACY_SUPPORT=0;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false false MultiThreaded diff --git a/ext/openxr/libs/pico/arm64-v8a/libopenxr_loader.so b/ext/openxr/libs/pico/arm64-v8a/libopenxr_loader.so index 784337e64e..c93b4e444d 100644 Binary files a/ext/openxr/libs/pico/arm64-v8a/libopenxr_loader.so and b/ext/openxr/libs/pico/arm64-v8a/libopenxr_loader.so differ diff --git a/ext/openxr/openxr.h b/ext/openxr/openxr.h index 02ec7cfbcb..88772f7f4e 100644 --- a/ext/openxr/openxr.h +++ b/ext/openxr/openxr.h @@ -2,7 +2,7 @@ #define OPENXR_H_ 1 /* -** Copyright (c) 2017-2021, The Khronos Group Inc. +** Copyright (c) 2017-2022, The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 OR MIT */ @@ -25,12 +25,15 @@ extern "C" { ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL)) // OpenXR current version number. -#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 14) +#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 24) #define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL) #define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL) #define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL) +#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16 + + #if !defined(XR_NULL_HANDLE) #if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED #define XR_NULL_HANDLE nullptr @@ -120,7 +123,6 @@ XR_DEFINE_HANDLE(XrActionSet) #define XR_MAX_PATH_LENGTH 256 #define XR_MAX_STRUCTURE_NAME_SIZE 64 #define XR_MAX_RESULT_STRING_SIZE 64 -#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16 #define XR_MAX_ACTION_SET_NAME_SIZE 64 #define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128 #define XR_MAX_ACTION_NAME_SIZE 64 @@ -181,13 +183,37 @@ typedef enum XrResult { XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48, XR_ERROR_LOCALIZED_NAME_INVALID = -49, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50, + XR_ERROR_RUNTIME_UNAVAILABLE = -51, XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000, XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001, XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001, XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000, XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000, + XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000, + XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000, + XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001, + XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002, + XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003, + XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004, + XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005, XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000, XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000, + XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB = -1000113000, + XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB = -1000113001, + XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB = -1000113002, + XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB = -1000113003, + XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000, + XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001, + XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002, + XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB = -1000118003, + XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB = -1000118004, + XR_ERROR_UNKNOWN_PASSTHROUGH_FB = -1000118050, + XR_ERROR_RENDER_MODEL_KEY_INVALID_FB = -1000119000, + XR_RENDER_MODEL_UNAVAILABLE_FB = 1000119020, + XR_ERROR_MARKER_NOT_TRACKED_VARJO = -1000124000, + XR_ERROR_MARKER_ID_INVALID_VARJO = -1000124001, + XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001, + XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002, XR_RESULT_MAX_ENUM = 0x7FFFFFFF } XrResult; @@ -242,17 +268,6 @@ typedef enum XrStructureType { XR_TYPE_ACTIONS_SYNC_INFO = 61, XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62, XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63, - //pico add new type - XR_TYPE_EVENT_CONTROLLER_STATE_CHANGED = 1200006064, - XR_TYPE_EVENT_SEETHROUGH_STATE_CHANGED = 1200006065, - XR_TYPE_EVENT_HARDIPD_STATE_CHANGED = 1200006066, - XR_TYPE_EVENT_KEY_EVENT = 1200006067, - XR_TYPE_EVENT_FOVEATION_LEVEL_CHANGED = 1200006068, - XR_TYPE_EVENT_FRUSTUM_STATE_CHANGED = 1200006069, - XR_TYPE_EVENT_RENDER_TEXTURE_CHANGED = 1200006070, - XR_TYPE_EVENT_TARGET_FRAME_RATE_STATE_CHANGED = 1200006071, - XR_TYPE_EVENT_MRC_STATUS_CHANGED = 1200006072, - XR_TYPE_EVENT_REFRESH_RATE_CHANGE = 1200006073, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000, @@ -291,9 +306,14 @@ typedef enum XrStructureType { XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001, + XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB = 1000040000, + XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB = 1000041001, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000, + XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT = 1000049001, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT = 1000049002, + XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT = 1000049003, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002, @@ -317,16 +337,118 @@ typedef enum XrStructureType { XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000, + XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT = 1000066000, + XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000, + XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000, + XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT = 1000078000, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000, + XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000, + XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000, + XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001, + XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002, + XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003, + XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004, + XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005, + XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006, + XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007, + XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008, + XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009, + XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010, + XR_TYPE_SCENE_PLANES_MSFT = 1000097011, + XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012, + XR_TYPE_SCENE_MESHES_MSFT = 1000097013, + XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014, + XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015, + XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016, + XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017, + XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018, + XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000, + XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000, + XR_TYPE_VIVE_TRACKER_PATHS_HTCX = 1000103000, + XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX = 1000103001, + XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000, + XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001, + XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000, + XR_TYPE_HAND_TRACKING_MESH_FB = 1000110001, + XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003, + XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001, + XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000, + XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB = 1000113004, + XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB = 1000113003, + XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB = 1000113007, + XR_TYPE_SPACE_COMPONENT_STATUS_FB = 1000113001, + XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB = 1000113005, + XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB = 1000113006, + XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000, + XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001, + XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002, + XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB = 1000115000, + XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB = 1000116009, + XR_TYPE_KEYBOARD_TRACKING_QUERY_FB = 1000116004, + XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB = 1000116002, + XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB = 1000117001, + XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB = 1000118000, + XR_TYPE_PASSTHROUGH_CREATE_INFO_FB = 1000118001, + XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB = 1000118002, + XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB = 1000118003, + XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB = 1000118004, + XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB = 1000118005, + XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020, + XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021, + XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022, + XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB = 1000118023, + XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030, + XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000, + XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001, + XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002, + XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003, + XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004, + XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB = 1000119005, XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000, + XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000, + XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001, + XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002, + XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000, + XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO = 1000124000, + XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO = 1000124001, + XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002, + XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000, + XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001, + XR_TYPE_SPACE_QUERY_INFO_FB = 1000156001, + XR_TYPE_SPACE_QUERY_RESULTS_FB = 1000156002, + XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB = 1000156003, + XR_TYPE_SPACE_UUID_FILTER_INFO_FB = 1000156054, + XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB = 1000156052, + XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB = 1000156103, + XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB = 1000156104, + XR_TYPE_SPACE_SAVE_INFO_FB = 1000158000, + XR_TYPE_SPACE_ERASE_INFO_FB = 1000158001, + XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB = 1000158106, + XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB = 1000158107, + XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000, + XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000, + XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000, + XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB = 1000163000, + XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000, + XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001, + XR_TYPE_SEMANTIC_LABELS_FB = 1000175000, + XR_TYPE_ROOM_LAYOUT_FB = 1000175001, + XR_TYPE_BOUNDARY_2D_FB = 1000175002, + XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000, + XR_TYPE_SPACE_CONTAINER_FB = 1000199000, + XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002, + XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB = 1000204000, + XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META = 1000227000, + XR_TYPE_PERFORMANCE_METRICS_STATE_META = 1000232001, + XR_TYPE_PERFORMANCE_METRICS_COUNTER_META = 1000232002, XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, @@ -359,6 +481,7 @@ typedef enum XrReferenceSpaceType { XR_REFERENCE_SPACE_TYPE_LOCAL = 2, XR_REFERENCE_SPACE_TYPE_STAGE = 3, XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000, + XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000, XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF } XrReferenceSpaceType; @@ -401,7 +524,17 @@ typedef enum XrObjectType { XR_OBJECT_TYPE_ACTION = 6, XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000, XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000, + XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT = 1000049000, XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000, + XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000, + XR_OBJECT_TYPE_SCENE_MSFT = 1000097001, + XR_OBJECT_TYPE_FACIAL_TRACKER_HTC = 1000104000, + XR_OBJECT_TYPE_FOVEATION_PROFILE_FB = 1000114000, + XR_OBJECT_TYPE_TRIANGLE_MESH_FB = 1000117000, + XR_OBJECT_TYPE_PASSTHROUGH_FB = 1000118000, + XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB = 1000118002, + XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB = 1000118004, + XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT = 1000142000, XR_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF } XrObjectType; typedef XrFlags64 XrInstanceCreateFlags; @@ -443,6 +576,7 @@ static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT = 0x00000 static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_SAMPLED_BIT = 0x00000020; static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT = 0x00000040; static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND = 0x00000080; +static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR = 0x00000080; // alias of XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND typedef XrFlags64 XrCompositionLayerFlags; @@ -555,6 +689,7 @@ typedef struct XrVector3f { float z; } XrVector3f; +// XrSpaceVelocity extends XrSpaceLocation typedef struct XrSpaceVelocity { XrStructureType type; void* XR_MAY_ALIAS next; @@ -1307,7 +1442,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback( XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback( XrSession session, const XrHapticActionInfo* hapticActionInfo); -#endif +#endif /* !XR_NO_PROTOTYPES */ #define XR_KHR_composition_layer_cube 1 @@ -1327,8 +1462,9 @@ typedef struct XrCompositionLayerCubeKHR { #define XR_KHR_composition_layer_depth 1 -#define XR_KHR_composition_layer_depth_SPEC_VERSION 5 +#define XR_KHR_composition_layer_depth_SPEC_VERSION 6 #define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth" +// XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView typedef struct XrCompositionLayerDepthInfoKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -1409,18 +1545,21 @@ typedef struct XrEventDataVisibilityMaskChangedKHR { typedef XrResult (XRAPI_PTR *PFN_xrGetVisibilityMaskKHR)(XrSession session, XrViewConfigurationType viewConfigurationType, uint32_t viewIndex, XrVisibilityMaskTypeKHR visibilityMaskType, XrVisibilityMaskKHR* visibilityMask); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetVisibilityMaskKHR( XrSession session, XrViewConfigurationType viewConfigurationType, uint32_t viewIndex, XrVisibilityMaskTypeKHR visibilityMaskType, XrVisibilityMaskKHR* visibilityMask); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_KHR_composition_layer_color_scale_bias 1 #define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5 #define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias" +// XrCompositionLayerColorScaleBiasKHR extends XrCompositionLayerBaseHeader typedef struct XrCompositionLayerColorScaleBiasKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -1441,9 +1580,11 @@ typedef struct XR_MAY_ALIAS XrLoaderInitInfoBaseHeaderKHR { typedef XrResult (XRAPI_PTR *PFN_xrInitializeLoaderKHR)(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR( const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_KHR_composition_layer_equirect2 1 @@ -1468,11 +1609,12 @@ typedef struct XrCompositionLayerEquirect2KHR { #define XR_KHR_binding_modification 1 #define XR_KHR_binding_modification_SPEC_VERSION 1 #define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification" -typedef struct XrBindingModificationBaseHeaderKHR { +typedef struct XR_MAY_ALIAS XrBindingModificationBaseHeaderKHR { XrStructureType type; const void* XR_MAY_ALIAS next; } XrBindingModificationBaseHeaderKHR; +// XrBindingModificationsKHR extends XrInteractionProfileSuggestedBinding typedef struct XrBindingModificationsKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -1482,8 +1624,13 @@ typedef struct XrBindingModificationsKHR { +#define XR_KHR_swapchain_usage_input_attachment_bit 1 +#define XR_KHR_swapchain_usage_input_attachment_bit_SPEC_VERSION 3 +#define XR_KHR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_KHR_swapchain_usage_input_attachment_bit" + + #define XR_EXT_performance_settings 1 -#define XR_EXT_performance_settings_SPEC_VERSION 1 +#define XR_EXT_performance_settings_SPEC_VERSION 3 #define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings" typedef enum XrPerfSettingsDomainEXT { @@ -1525,31 +1672,35 @@ typedef struct XrEventDataPerfSettingsEXT { typedef XrResult (XRAPI_PTR *PFN_xrPerfSettingsSetPerformanceLevelEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsLevelEXT level); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrPerfSettingsSetPerformanceLevelEXT( XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsLevelEXT level); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_EXT_thermal_query 1 -#define XR_EXT_thermal_query_SPEC_VERSION 1 +#define XR_EXT_thermal_query_SPEC_VERSION 2 #define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query" typedef XrResult (XRAPI_PTR *PFN_xrThermalGetTemperatureTrendEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsNotificationLevelEXT* notificationLevel, float* tempHeadroom, float* tempSlope); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrThermalGetTemperatureTrendEXT( XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsNotificationLevelEXT* notificationLevel, float* tempHeadroom, float* tempSlope); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_EXT_debug_utils 1 XR_DEFINE_HANDLE(XrDebugUtilsMessengerEXT) -#define XR_EXT_debug_utils_SPEC_VERSION 3 +#define XR_EXT_debug_utils_SPEC_VERSION 4 #define XR_EXT_DEBUG_UTILS_EXTENSION_NAME "XR_EXT_debug_utils" typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT; @@ -1600,6 +1751,7 @@ typedef XrBool32 (XRAPI_PTR *PFN_xrDebugUtilsMessengerCallbackEXT)( void* userData); +// XrDebugUtilsMessengerCreateInfoEXT extends XrInstanceCreateInfo typedef struct XrDebugUtilsMessengerCreateInfoEXT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -1618,6 +1770,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrSessionEndDebugUtilsLabelRegionEXT)(XrSession typedef XrResult (XRAPI_PTR *PFN_xrSessionInsertDebugUtilsLabelEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrSetDebugUtilsObjectNameEXT( XrInstance instance, const XrDebugUtilsObjectNameInfoEXT* nameInfo); @@ -1646,18 +1799,21 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSessionEndDebugUtilsLabelRegionEXT( XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT( XrSession session, const XrDebugUtilsLabelEXT* labelInfo); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_EXT_eye_gaze_interaction 1 -#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 1 +#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 2 #define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction" +// XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties typedef struct XrSystemEyeGazeInteractionPropertiesEXT { XrStructureType type; void* XR_MAY_ALIAS next; XrBool32 supportsEyeGazeInteraction; } XrSystemEyeGazeInteractionPropertiesEXT; +// XrEyeGazeSampleTimeEXT extends XrSpaceLocation typedef struct XrEyeGazeSampleTimeEXT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -1667,18 +1823,18 @@ typedef struct XrEyeGazeSampleTimeEXT { #define XR_EXTX_overlay 1 -#define XR_EXTX_overlay_SPEC_VERSION 4 +#define XR_EXTX_overlay_SPEC_VERSION 5 #define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay" typedef XrFlags64 XrOverlaySessionCreateFlagsEXTX; // Flag bits for XrOverlaySessionCreateFlagsEXTX -static const XrOverlaySessionCreateFlagsEXTX XR_OVERLAY_SESSION_CREATE_RELAXED_DISPLAY_TIME_BIT_EXTX = 0x00000001; typedef XrFlags64 XrOverlayMainSessionFlagsEXTX; // Flag bits for XrOverlayMainSessionFlagsEXTX static const XrOverlayMainSessionFlagsEXTX XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX = 0x00000001; +// XrSessionCreateInfoOverlayEXTX extends XrSessionCreateInfo typedef struct XrSessionCreateInfoOverlayEXTX { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -1707,7 +1863,7 @@ typedef struct XrEventDataMainSessionVisibilityChangedEXTX { #define XR_MSFT_spatial_anchor 1 XR_DEFINE_HANDLE(XrSpatialAnchorMSFT) -#define XR_MSFT_spatial_anchor_SPEC_VERSION 1 +#define XR_MSFT_spatial_anchor_SPEC_VERSION 2 #define XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME "XR_MSFT_spatial_anchor" typedef struct XrSpatialAnchorCreateInfoMSFT { XrStructureType type; @@ -1729,6 +1885,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorSpaceMSFT)(XrSession sessi typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorMSFT)(XrSpatialAnchorMSFT anchor); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorMSFT( XrSession session, const XrSpatialAnchorCreateInfoMSFT* createInfo, @@ -1741,7 +1898,50 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorSpaceMSFT( XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorMSFT( XrSpatialAnchorMSFT anchor); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_image_layout 1 +#define XR_FB_composition_layer_image_layout_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_IMAGE_LAYOUT_EXTENSION_NAME "XR_FB_composition_layer_image_layout" +typedef XrFlags64 XrCompositionLayerImageLayoutFlagsFB; + +// Flag bits for XrCompositionLayerImageLayoutFlagsFB +static const XrCompositionLayerImageLayoutFlagsFB XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB = 0x00000001; + +// XrCompositionLayerImageLayoutFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerImageLayoutFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrCompositionLayerImageLayoutFlagsFB flags; +} XrCompositionLayerImageLayoutFB; + + + +#define XR_FB_composition_layer_alpha_blend 1 +#define XR_FB_composition_layer_alpha_blend_SPEC_VERSION 2 +#define XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME "XR_FB_composition_layer_alpha_blend" + +typedef enum XrBlendFactorFB { + XR_BLEND_FACTOR_ZERO_FB = 0, + XR_BLEND_FACTOR_ONE_FB = 1, + XR_BLEND_FACTOR_SRC_ALPHA_FB = 2, + XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB = 3, + XR_BLEND_FACTOR_DST_ALPHA_FB = 4, + XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB = 5, + XR_BLEND_FACTOR_MAX_ENUM_FB = 0x7FFFFFFF +} XrBlendFactorFB; +// XrCompositionLayerAlphaBlendFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerAlphaBlendFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBlendFactorFB srcFactorColor; + XrBlendFactorFB dstFactorColor; + XrBlendFactorFB srcFactorAlpha; + XrBlendFactorFB dstFactorAlpha; +} XrCompositionLayerAlphaBlendFB; + #define XR_MND_headless 1 @@ -1757,6 +1957,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorMSFT( #define XR_EXT_view_configuration_depth_range 1 #define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1 #define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range" +// XrViewConfigurationDepthRangeEXT extends XrViewConfigurationView typedef struct XrViewConfigurationDepthRangeEXT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -1769,7 +1970,7 @@ typedef struct XrViewConfigurationDepthRangeEXT { #define XR_EXT_conformance_automation 1 -#define XR_EXT_conformance_automation_SPEC_VERSION 1 +#define XR_EXT_conformance_automation_SPEC_VERSION 3 #define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation" typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive); typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state); @@ -1778,6 +1979,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateVector2fEXT)(XrSession ses typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceActiveEXT( XrSession session, XrPath interactionProfile, @@ -1808,12 +2010,15 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT( XrPath inputSourcePath, XrSpace space, XrPosef pose); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_MSFT_spatial_graph_bridge 1 -#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1 +XR_DEFINE_HANDLE(XrSpatialGraphNodeBindingMSFT) +#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 2 #define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge" +#define XR_GUID_SIZE_MSFT 16 typedef enum XrSpatialGraphNodeTypeMSFT { XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1, @@ -1824,18 +2029,56 @@ typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; XrSpatialGraphNodeTypeMSFT nodeType; - uint8_t nodeId[16]; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; XrPosef pose; } XrSpatialGraphNodeSpaceCreateInfoMSFT; +typedef struct XrSpatialGraphStaticNodeBindingCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialGraphStaticNodeBindingCreateInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpatialGraphNodeBindingPropertiesGetInfoMSFT; + +typedef struct XrSpatialGraphNodeBindingPropertiesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint8_t nodeId[XR_GUID_SIZE_MSFT]; + XrPosef poseInNodeSpace; +} XrSpatialGraphNodeBindingPropertiesMSFT; + typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space); +typedef XrResult (XRAPI_PTR *PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT)(XrSession session, const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, XrSpatialGraphNodeBindingMSFT* nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialGraphNodeBindingMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding, const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, XrSpatialGraphNodeBindingPropertiesMSFT* properties); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT( XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space); -#endif + +XRAPI_ATTR XrResult XRAPI_CALL xrTryCreateSpatialGraphStaticNodeBindingMSFT( + XrSession session, + const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, + XrSpatialGraphNodeBindingMSFT* nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialGraphNodeBindingMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpatialGraphNodeBindingPropertiesMSFT( + XrSpatialGraphNodeBindingMSFT nodeBinding, + const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, + XrSpatialGraphNodeBindingPropertiesMSFT* properties); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_MSFT_hand_interaction 1 @@ -1848,7 +2091,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT( #define XR_HAND_JOINT_COUNT_EXT 26 XR_DEFINE_HANDLE(XrHandTrackerEXT) -#define XR_EXT_hand_tracking_SPEC_VERSION 2 +#define XR_EXT_hand_tracking_SPEC_VERSION 4 #define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking" typedef enum XrHandEXT { @@ -1889,8 +2132,10 @@ typedef enum XrHandJointEXT { typedef enum XrHandJointSetEXT { XR_HAND_JOINT_SET_DEFAULT_EXT = 0, + XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP = 1000149000, XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF } XrHandJointSetEXT; +// XrSystemHandTrackingPropertiesEXT extends XrSystemProperties typedef struct XrSystemHandTrackingPropertiesEXT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -1931,6 +2176,7 @@ typedef struct XrHandJointLocationsEXT { XrHandJointLocationEXT* jointLocations; } XrHandJointLocationsEXT; +// XrHandJointVelocitiesEXT extends XrHandJointLocationsEXT typedef struct XrHandJointVelocitiesEXT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -1943,6 +2189,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrDestroyHandTrackerEXT)(XrHandTrackerEXT handT typedef XrResult (XRAPI_PTR *PFN_xrLocateHandJointsEXT)(XrHandTrackerEXT handTracker, const XrHandJointsLocateInfoEXT* locateInfo, XrHandJointLocationsEXT* locations); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandTrackerEXT( XrSession session, const XrHandTrackerCreateInfoEXT* createInfo, @@ -1955,11 +2202,12 @@ XRAPI_ATTR XrResult XRAPI_CALL xrLocateHandJointsEXT( XrHandTrackerEXT handTracker, const XrHandJointsLocateInfoEXT* locateInfo, XrHandJointLocationsEXT* locations); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_MSFT_hand_tracking_mesh 1 -#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 2 +#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 4 #define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh" typedef enum XrHandPoseTypeMSFT { @@ -1967,6 +2215,7 @@ typedef enum XrHandPoseTypeMSFT { XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT = 1, XR_HAND_POSE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF } XrHandPoseTypeMSFT; +// XrSystemHandTrackingMeshPropertiesMSFT extends XrSystemProperties typedef struct XrSystemHandTrackingMeshPropertiesMSFT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -2018,6 +2267,7 @@ typedef struct XrHandMeshMSFT { XrHandMeshVertexBufferMSFT vertexBuffer; } XrHandMeshMSFT; +// XrHandPoseTypeInfoMSFT extends XrHandTrackerCreateInfoEXT typedef struct XrHandPoseTypeInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -2028,6 +2278,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrCreateHandMeshSpaceMSFT)(XrHandTrackerEXT han typedef XrResult (XRAPI_PTR *PFN_xrUpdateHandMeshMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshUpdateInfoMSFT* updateInfo, XrHandMeshMSFT* handMesh); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandMeshSpaceMSFT( XrHandTrackerEXT handTracker, const XrHandMeshSpaceCreateInfoMSFT* createInfo, @@ -2037,12 +2288,14 @@ XRAPI_ATTR XrResult XRAPI_CALL xrUpdateHandMeshMSFT( XrHandTrackerEXT handTracker, const XrHandMeshUpdateInfoMSFT* updateInfo, XrHandMeshMSFT* handMesh); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_MSFT_secondary_view_configuration 1 #define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1 #define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration" +// XrSecondaryViewConfigurationSessionBeginInfoMSFT extends XrSessionBeginInfo typedef struct XrSecondaryViewConfigurationSessionBeginInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -2057,6 +2310,7 @@ typedef struct XrSecondaryViewConfigurationStateMSFT { XrBool32 active; } XrSecondaryViewConfigurationStateMSFT; +// XrSecondaryViewConfigurationFrameStateMSFT extends XrFrameState typedef struct XrSecondaryViewConfigurationFrameStateMSFT { XrStructureType type; void* XR_MAY_ALIAS next; @@ -2073,6 +2327,7 @@ typedef struct XrSecondaryViewConfigurationLayerInfoMSFT { const XrCompositionLayerBaseHeader* const* layers; } XrSecondaryViewConfigurationLayerInfoMSFT; +// XrSecondaryViewConfigurationFrameEndInfoMSFT extends XrFrameEndInfo typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -2080,6 +2335,7 @@ typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT { const XrSecondaryViewConfigurationLayerInfoMSFT* viewConfigurationLayersInfo; } XrSecondaryViewConfigurationFrameEndInfoMSFT; +// XrSecondaryViewConfigurationSwapchainCreateInfoMSFT extends XrSwapchainCreateInfo typedef struct XrSecondaryViewConfigurationSwapchainCreateInfoMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -2142,6 +2398,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelPropertiesMSFT)(XrSession s typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelStateMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelStateMSFT* state); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelKeyMSFT( XrSession session, XrPath topLevelUserPath, @@ -2163,7 +2420,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelStateMSFT( XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelStateMSFT* state); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_EXT_win32_appcontainer_compatible 1 @@ -2174,6 +2432,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelStateMSFT( #define XR_EPIC_view_configuration_fov 1 #define XR_EPIC_view_configuration_fov_SPEC_VERSION 2 #define XR_EPIC_VIEW_CONFIGURATION_FOV_EXTENSION_NAME "XR_EPIC_view_configuration_fov" +// XrViewConfigurationViewFovEPIC extends XrViewConfigurationView typedef struct XrViewConfigurationViewFovEPIC { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -2183,13 +2442,116 @@ typedef struct XrViewConfigurationViewFovEPIC { +#define XR_MSFT_composition_layer_reprojection 1 +#define XR_MSFT_composition_layer_reprojection_SPEC_VERSION 1 +#define XR_MSFT_COMPOSITION_LAYER_REPROJECTION_EXTENSION_NAME "XR_MSFT_composition_layer_reprojection" + +typedef enum XrReprojectionModeMSFT { + XR_REPROJECTION_MODE_DEPTH_MSFT = 1, + XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT = 2, + XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT = 3, + XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT = 4, + XR_REPROJECTION_MODE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrReprojectionModeMSFT; +// XrCompositionLayerReprojectionInfoMSFT extends XrCompositionLayerProjection +typedef struct XrCompositionLayerReprojectionInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrReprojectionModeMSFT reprojectionMode; +} XrCompositionLayerReprojectionInfoMSFT; + +// XrCompositionLayerReprojectionPlaneOverrideMSFT extends XrCompositionLayerProjection +typedef struct XrCompositionLayerReprojectionPlaneOverrideMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrVector3f position; + XrVector3f normal; + XrVector3f velocity; +} XrCompositionLayerReprojectionPlaneOverrideMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReprojectionModesMSFT)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t modeCapacityInput, uint32_t* modeCountOutput, XrReprojectionModeMSFT* modes); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReprojectionModesMSFT( + XrInstance instance, + XrSystemId systemId, + XrViewConfigurationType viewConfigurationType, + uint32_t modeCapacityInput, + uint32_t* modeCountOutput, + XrReprojectionModeMSFT* modes); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_HUAWEI_controller_interaction 1 #define XR_HUAWEI_controller_interaction_SPEC_VERSION 1 #define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction" +#define XR_FB_swapchain_update_state 1 +#define XR_FB_swapchain_update_state_SPEC_VERSION 3 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_EXTENSION_NAME "XR_FB_swapchain_update_state" +typedef struct XR_MAY_ALIAS XrSwapchainStateBaseHeaderFB { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrSwapchainStateBaseHeaderFB; + +typedef XrResult (XRAPI_PTR *PFN_xrUpdateSwapchainFB)(XrSwapchain swapchain, const XrSwapchainStateBaseHeaderFB* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetSwapchainStateFB)(XrSwapchain swapchain, XrSwapchainStateBaseHeaderFB* state); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrUpdateSwapchainFB( + XrSwapchain swapchain, + const XrSwapchainStateBaseHeaderFB* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSwapchainStateFB( + XrSwapchain swapchain, + XrSwapchainStateBaseHeaderFB* state); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_secure_content 1 +#define XR_FB_composition_layer_secure_content_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_SECURE_CONTENT_EXTENSION_NAME "XR_FB_composition_layer_secure_content" +typedef XrFlags64 XrCompositionLayerSecureContentFlagsFB; + +// Flag bits for XrCompositionLayerSecureContentFlagsFB +static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB = 0x00000001; +static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB = 0x00000002; + +// XrCompositionLayerSecureContentFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerSecureContentFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSecureContentFlagsFB flags; +} XrCompositionLayerSecureContentFB; + + + +#define XR_EXT_dpad_binding 1 +#define XR_EXT_dpad_binding_SPEC_VERSION 1 +#define XR_EXT_DPAD_BINDING_EXTENSION_NAME "XR_EXT_dpad_binding" +typedef struct XrInteractionProfileDpadBindingEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPath binding; + XrActionSet actionSet; + float forceThreshold; + float forceThresholdReleased; + float centerRegion; + float wedgeAngle; + XrBool32 isSticky; + const XrHapticBaseHeader* onHaptic; + const XrHapticBaseHeader* offHaptic; +} XrInteractionProfileDpadBindingEXT; + + + #define XR_VALVE_analog_threshold 1 -#define XR_VALVE_analog_threshold_SPEC_VERSION 1 +#define XR_VALVE_analog_threshold_SPEC_VERSION 2 #define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold" typedef struct XrInteractionProfileAnalogThresholdVALVE { XrStructureType type; @@ -2204,6 +2566,24 @@ typedef struct XrInteractionProfileAnalogThresholdVALVE { +#define XR_EXT_hand_joints_motion_range 1 +#define XR_EXT_hand_joints_motion_range_SPEC_VERSION 1 +#define XR_EXT_HAND_JOINTS_MOTION_RANGE_EXTENSION_NAME "XR_EXT_hand_joints_motion_range" + +typedef enum XrHandJointsMotionRangeEXT { + XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT = 1, + XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT = 2, + XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT = 0x7FFFFFFF +} XrHandJointsMotionRangeEXT; +// XrHandJointsMotionRangeInfoEXT extends XrHandJointsLocateInfoEXT +typedef struct XrHandJointsMotionRangeInfoEXT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrHandJointsMotionRangeEXT handJointsMotionRange; +} XrHandJointsMotionRangeInfoEXT; + + + #define XR_EXT_samsung_odyssey_controller 1 #define XR_EXT_samsung_odyssey_controller_SPEC_VERSION 1 #define XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME "XR_EXT_samsung_odyssey_controller" @@ -2219,6 +2599,374 @@ typedef struct XrInteractionProfileAnalogThresholdVALVE { #define XR_MND_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_MND_swapchain_usage_input_attachment_bit" +#define XR_MSFT_scene_understanding 1 + + XR_DEFINE_HANDLE(XrSceneObserverMSFT) + + + XR_DEFINE_HANDLE(XrSceneMSFT) + +#define XR_MSFT_scene_understanding_SPEC_VERSION 1 +#define XR_MSFT_SCENE_UNDERSTANDING_EXTENSION_NAME "XR_MSFT_scene_understanding" + +typedef enum XrSceneComputeFeatureMSFT { + XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT = 1, + XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT = 2, + XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT = 3, + XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT = 4, + XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT = 1000098000, + XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeFeatureMSFT; + +typedef enum XrSceneComputeConsistencyMSFT { + XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT = 1, + XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT = 2, + XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT = 3, + XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeConsistencyMSFT; + +typedef enum XrMeshComputeLodMSFT { + XR_MESH_COMPUTE_LOD_COARSE_MSFT = 1, + XR_MESH_COMPUTE_LOD_MEDIUM_MSFT = 2, + XR_MESH_COMPUTE_LOD_FINE_MSFT = 3, + XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT = 4, + XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrMeshComputeLodMSFT; + +typedef enum XrSceneComponentTypeMSFT { + XR_SCENE_COMPONENT_TYPE_INVALID_MSFT = -1, + XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT = 1, + XR_SCENE_COMPONENT_TYPE_PLANE_MSFT = 2, + XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT = 3, + XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT = 4, + XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT = 1000098000, + XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComponentTypeMSFT; + +typedef enum XrSceneObjectTypeMSFT { + XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT = -1, + XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT = 1, + XR_SCENE_OBJECT_TYPE_WALL_MSFT = 2, + XR_SCENE_OBJECT_TYPE_FLOOR_MSFT = 3, + XR_SCENE_OBJECT_TYPE_CEILING_MSFT = 4, + XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT = 5, + XR_SCENE_OBJECT_TYPE_INFERRED_MSFT = 6, + XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneObjectTypeMSFT; + +typedef enum XrScenePlaneAlignmentTypeMSFT { + XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT = 0, + XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT = 1, + XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT = 2, + XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrScenePlaneAlignmentTypeMSFT; + +typedef enum XrSceneComputeStateMSFT { + XR_SCENE_COMPUTE_STATE_NONE_MSFT = 0, + XR_SCENE_COMPUTE_STATE_UPDATING_MSFT = 1, + XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT = 2, + XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT = 3, + XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT = 0x7FFFFFFF +} XrSceneComputeStateMSFT; +typedef struct XrUuidMSFT { + uint8_t bytes[16]; +} XrUuidMSFT; + +typedef struct XrSceneObserverCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSceneObserverCreateInfoMSFT; + +typedef struct XrSceneCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSceneCreateInfoMSFT; + +typedef struct XrSceneSphereBoundMSFT { + XrVector3f center; + float radius; +} XrSceneSphereBoundMSFT; + +typedef struct XrSceneOrientedBoxBoundMSFT { + XrPosef pose; + XrVector3f extents; +} XrSceneOrientedBoxBoundMSFT; + +typedef struct XrSceneFrustumBoundMSFT { + XrPosef pose; + XrFovf fov; + float farDistance; +} XrSceneFrustumBoundMSFT; + +typedef struct XrSceneBoundsMSFT { + XrSpace space; + XrTime time; + uint32_t sphereCount; + const XrSceneSphereBoundMSFT* spheres; + uint32_t boxCount; + const XrSceneOrientedBoxBoundMSFT* boxes; + uint32_t frustumCount; + const XrSceneFrustumBoundMSFT* frustums; +} XrSceneBoundsMSFT; + +typedef struct XrNewSceneComputeInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t requestedFeatureCount; + const XrSceneComputeFeatureMSFT* requestedFeatures; + XrSceneComputeConsistencyMSFT consistency; + XrSceneBoundsMSFT bounds; +} XrNewSceneComputeInfoMSFT; + +// XrVisualMeshComputeLodInfoMSFT extends XrNewSceneComputeInfoMSFT +typedef struct XrVisualMeshComputeLodInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrMeshComputeLodMSFT lod; +} XrVisualMeshComputeLodInfoMSFT; + +typedef struct XrSceneComponentMSFT { + XrSceneComponentTypeMSFT componentType; + XrUuidMSFT id; + XrUuidMSFT parentId; + XrTime updateTime; +} XrSceneComponentMSFT; + +typedef struct XrSceneComponentsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t componentCapacityInput; + uint32_t componentCountOutput; + XrSceneComponentMSFT* components; +} XrSceneComponentsMSFT; + +typedef struct XrSceneComponentsGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSceneComponentTypeMSFT componentType; +} XrSceneComponentsGetInfoMSFT; + +typedef struct XrSceneComponentLocationMSFT { + XrSpaceLocationFlags flags; + XrPosef pose; +} XrSceneComponentLocationMSFT; + +typedef struct XrSceneComponentLocationsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t locationCount; + XrSceneComponentLocationMSFT* locations; +} XrSceneComponentLocationsMSFT; + +typedef struct XrSceneComponentsLocateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; + uint32_t componentIdCount; + const XrUuidMSFT* componentIds; +} XrSceneComponentsLocateInfoMSFT; + +typedef struct XrSceneObjectMSFT { + XrSceneObjectTypeMSFT objectType; +} XrSceneObjectMSFT; + +// XrSceneObjectsMSFT extends XrSceneComponentsMSFT +typedef struct XrSceneObjectsMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t sceneObjectCount; + XrSceneObjectMSFT* sceneObjects; +} XrSceneObjectsMSFT; + +// XrSceneComponentParentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrSceneComponentParentFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidMSFT parentId; +} XrSceneComponentParentFilterInfoMSFT; + +// XrSceneObjectTypesFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrSceneObjectTypesFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t objectTypeCount; + const XrSceneObjectTypeMSFT* objectTypes; +} XrSceneObjectTypesFilterInfoMSFT; + +typedef struct XrScenePlaneMSFT { + XrScenePlaneAlignmentTypeMSFT alignment; + XrExtent2Df size; + uint64_t meshBufferId; + XrBool32 supportsIndicesUint16; +} XrScenePlaneMSFT; + +// XrScenePlanesMSFT extends XrSceneComponentsMSFT +typedef struct XrScenePlanesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t scenePlaneCount; + XrScenePlaneMSFT* scenePlanes; +} XrScenePlanesMSFT; + +// XrScenePlaneAlignmentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT +typedef struct XrScenePlaneAlignmentFilterInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t alignmentCount; + const XrScenePlaneAlignmentTypeMSFT* alignments; +} XrScenePlaneAlignmentFilterInfoMSFT; + +typedef struct XrSceneMeshMSFT { + uint64_t meshBufferId; + XrBool32 supportsIndicesUint16; +} XrSceneMeshMSFT; + +// XrSceneMeshesMSFT extends XrSceneComponentsMSFT +typedef struct XrSceneMeshesMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t sceneMeshCount; + XrSceneMeshMSFT* sceneMeshes; +} XrSceneMeshesMSFT; + +typedef struct XrSceneMeshBuffersGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t meshBufferId; +} XrSceneMeshBuffersGetInfoMSFT; + +typedef struct XrSceneMeshBuffersMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrSceneMeshBuffersMSFT; + +typedef struct XrSceneMeshVertexBufferMSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector3f* vertices; +} XrSceneMeshVertexBufferMSFT; + +typedef struct XrSceneMeshIndicesUint32MSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint32_t* indices; +} XrSceneMeshIndicesUint32MSFT; + +typedef struct XrSceneMeshIndicesUint16MSFT { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + uint16_t* indices; +} XrSceneMeshIndicesUint16MSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSceneComputeFeaturesMSFT)(XrInstance instance, XrSystemId systemId, uint32_t featureCapacityInput, uint32_t* featureCountOutput, XrSceneComputeFeatureMSFT* features); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneObserverMSFT)(XrSession session, const XrSceneObserverCreateInfoMSFT* createInfo, XrSceneObserverMSFT* sceneObserver); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneObserverMSFT)(XrSceneObserverMSFT sceneObserver); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneCreateInfoMSFT* createInfo, XrSceneMSFT* scene); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneMSFT)(XrSceneMSFT scene); +typedef XrResult (XRAPI_PTR *PFN_xrComputeNewSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrNewSceneComputeInfoMSFT* computeInfo); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComputeStateMSFT)(XrSceneObserverMSFT sceneObserver, XrSceneComputeStateMSFT* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsGetInfoMSFT* getInfo, XrSceneComponentsMSFT* components); +typedef XrResult (XRAPI_PTR *PFN_xrLocateSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsLocateInfoMSFT* locateInfo, XrSceneComponentLocationsMSFT* locations); +typedef XrResult (XRAPI_PTR *PFN_xrGetSceneMeshBuffersMSFT)(XrSceneMSFT scene, const XrSceneMeshBuffersGetInfoMSFT* getInfo, XrSceneMeshBuffersMSFT* buffers); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSceneComputeFeaturesMSFT( + XrInstance instance, + XrSystemId systemId, + uint32_t featureCapacityInput, + uint32_t* featureCountOutput, + XrSceneComputeFeatureMSFT* features); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneObserverMSFT( + XrSession session, + const XrSceneObserverCreateInfoMSFT* createInfo, + XrSceneObserverMSFT* sceneObserver); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneObserverMSFT( + XrSceneObserverMSFT sceneObserver); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrSceneCreateInfoMSFT* createInfo, + XrSceneMSFT* scene); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneMSFT( + XrSceneMSFT scene); + +XRAPI_ATTR XrResult XRAPI_CALL xrComputeNewSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrNewSceneComputeInfoMSFT* computeInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComputeStateMSFT( + XrSceneObserverMSFT sceneObserver, + XrSceneComputeStateMSFT* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComponentsMSFT( + XrSceneMSFT scene, + const XrSceneComponentsGetInfoMSFT* getInfo, + XrSceneComponentsMSFT* components); + +XRAPI_ATTR XrResult XRAPI_CALL xrLocateSceneComponentsMSFT( + XrSceneMSFT scene, + const XrSceneComponentsLocateInfoMSFT* locateInfo, + XrSceneComponentLocationsMSFT* locations); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneMeshBuffersMSFT( + XrSceneMSFT scene, + const XrSceneMeshBuffersGetInfoMSFT* getInfo, + XrSceneMeshBuffersMSFT* buffers); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_scene_understanding_serialization 1 +#define XR_MSFT_scene_understanding_serialization_SPEC_VERSION 1 +#define XR_MSFT_SCENE_UNDERSTANDING_SERIALIZATION_EXTENSION_NAME "XR_MSFT_scene_understanding_serialization" +typedef struct XrSerializedSceneFragmentDataGetInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidMSFT sceneFragmentId; +} XrSerializedSceneFragmentDataGetInfoMSFT; + +typedef struct XrDeserializeSceneFragmentMSFT { + uint32_t bufferSize; + const uint8_t* buffer; +} XrDeserializeSceneFragmentMSFT; + +typedef struct XrSceneDeserializeInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t fragmentCount; + const XrDeserializeSceneFragmentMSFT* fragments; +} XrSceneDeserializeInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrDeserializeSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneDeserializeInfoMSFT* deserializeInfo); +typedef XrResult (XRAPI_PTR *PFN_xrGetSerializedSceneFragmentDataMSFT)(XrSceneMSFT scene, const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, uint32_t countInput, uint32_t* readOutput, uint8_t* buffer); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrDeserializeSceneMSFT( + XrSceneObserverMSFT sceneObserver, + const XrSceneDeserializeInfoMSFT* deserializeInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSerializedSceneFragmentDataMSFT( + XrSceneMSFT scene, + const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, + uint32_t countInput, + uint32_t* readOutput, + uint8_t* buffer); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + #define XR_FB_display_refresh_rate 1 #define XR_FB_display_refresh_rate_SPEC_VERSION 1 #define XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME "XR_FB_display_refresh_rate" @@ -2234,6 +2982,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrGetDisplayRefreshRateFB)(XrSession session, f typedef XrResult (XRAPI_PTR *PFN_xrRequestDisplayRefreshRateFB)(XrSession session, float displayRefreshRate); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateDisplayRefreshRatesFB( XrSession session, uint32_t displayRefreshRateCapacityInput, @@ -2247,7 +2996,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetDisplayRefreshRateFB( XRAPI_ATTR XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB( XrSession session, float displayRefreshRate); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #define XR_HTC_vive_cosmos_controller_interaction 1 @@ -2255,8 +3005,171 @@ XRAPI_ATTR XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB( #define XR_HTC_VIVE_COSMOS_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_cosmos_controller_interaction" +#define XR_HTCX_vive_tracker_interaction 1 +#define XR_HTCX_vive_tracker_interaction_SPEC_VERSION 1 +#define XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTCX_vive_tracker_interaction" +typedef struct XrViveTrackerPathsHTCX { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPath persistentPath; + XrPath rolePath; +} XrViveTrackerPathsHTCX; + +typedef struct XrEventDataViveTrackerConnectedHTCX { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrViveTrackerPathsHTCX* paths; +} XrEventDataViveTrackerConnectedHTCX; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViveTrackerPathsHTCX)(XrInstance instance, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrViveTrackerPathsHTCX* paths); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViveTrackerPathsHTCX( + XrInstance instance, + uint32_t pathCapacityInput, + uint32_t* pathCountOutput, + XrViveTrackerPathsHTCX* paths); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_facial_tracking 1 + +#define XR_FACIAL_EXPRESSION_EYE_COUNT_HTC 14 + + +#define XR_FACIAL_EXPRESSION_LIP_COUNT_HTC 37 + +XR_DEFINE_HANDLE(XrFacialTrackerHTC) +#define XR_HTC_facial_tracking_SPEC_VERSION 1 +#define XR_HTC_FACIAL_TRACKING_EXTENSION_NAME "XR_HTC_facial_tracking" + +typedef enum XrEyeExpressionHTC { + XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0, + XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1, + XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2, + XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3, + XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4, + XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5, + XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6, + XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7, + XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8, + XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9, + XR_EYE_EXPRESSION_LEFT_IN_HTC = 10, + XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11, + XR_EYE_EXPRESSION_LEFT_UP_HTC = 12, + XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13, + XR_EYE_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF +} XrEyeExpressionHTC; + +typedef enum XrLipExpressionHTC { + XR_LIP_EXPRESSION_JAW_RIGHT_HTC = 0, + XR_LIP_EXPRESSION_JAW_LEFT_HTC = 1, + XR_LIP_EXPRESSION_JAW_FORWARD_HTC = 2, + XR_LIP_EXPRESSION_JAW_OPEN_HTC = 3, + XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4, + XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5, + XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6, + XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7, + XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8, + XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9, + XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10, + XR_LIP_EXPRESSION_MOUTH_POUT_HTC = 11, + XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12, + XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13, + XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14, + XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15, + XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16, + XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17, + XR_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18, + XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19, + XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20, + XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21, + XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22, + XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23, + XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24, + XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25, + XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26, + XR_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27, + XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28, + XR_LIP_EXPRESSION_TONGUE_UP_HTC = 29, + XR_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30, + XR_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31, + XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32, + XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33, + XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34, + XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35, + XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36, + XR_LIP_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF +} XrLipExpressionHTC; + +typedef enum XrFacialTrackingTypeHTC { + XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1, + XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2, + XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC = 0x7FFFFFFF +} XrFacialTrackingTypeHTC; +// XrSystemFacialTrackingPropertiesHTC extends XrSystemProperties +typedef struct XrSystemFacialTrackingPropertiesHTC { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportEyeFacialTracking; + XrBool32 supportLipFacialTracking; +} XrSystemFacialTrackingPropertiesHTC; + +typedef struct XrFacialExpressionsHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 isActive; + XrTime sampleTime; + uint32_t expressionCount; + float* expressionWeightings; +} XrFacialExpressionsHTC; + +typedef struct XrFacialTrackerCreateInfoHTC { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrFacialTrackingTypeHTC facialTrackingType; +} XrFacialTrackerCreateInfoHTC; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateFacialTrackerHTC)(XrSession session, const XrFacialTrackerCreateInfoHTC* createInfo, XrFacialTrackerHTC* facialTracker); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyFacialTrackerHTC)(XrFacialTrackerHTC facialTracker); +typedef XrResult (XRAPI_PTR *PFN_xrGetFacialExpressionsHTC)(XrFacialTrackerHTC facialTracker, XrFacialExpressionsHTC* facialExpressions); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateFacialTrackerHTC( + XrSession session, + const XrFacialTrackerCreateInfoHTC* createInfo, + XrFacialTrackerHTC* facialTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFacialTrackerHTC( + XrFacialTrackerHTC facialTracker); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC( + XrFacialTrackerHTC facialTracker, + XrFacialExpressionsHTC* facialExpressions); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_HTC_vive_focus3_controller_interaction 1 +#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 2 +#define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction" + + +#define XR_HTC_hand_interaction 1 +#define XR_HTC_hand_interaction_SPEC_VERSION 1 +#define XR_HTC_HAND_INTERACTION_EXTENSION_NAME "XR_HTC_hand_interaction" + + +#define XR_HTC_vive_wrist_tracker_interaction 1 +#define XR_HTC_vive_wrist_tracker_interaction_SPEC_VERSION 1 +#define XR_HTC_VIVE_WRIST_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_wrist_tracker_interaction" + + #define XR_FB_color_space 1 -#define XR_FB_color_space_SPEC_VERSION 1 +#define XR_FB_color_space_SPEC_VERSION 2 #define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space" typedef enum XrColorSpaceFB { @@ -2270,6 +3183,7 @@ typedef enum XrColorSpaceFB { XR_COLOR_SPACE_ADOBE_RGB_FB = 7, XR_COLOR_SPACE_MAX_ENUM_FB = 0x7FFFFFFF } XrColorSpaceFB; +// XrSystemColorSpacePropertiesFB extends XrSystemProperties typedef struct XrSystemColorSpacePropertiesFB { XrStructureType type; void* XR_MAY_ALIAS next; @@ -2280,6 +3194,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrEnumerateColorSpacesFB)(XrSession session, ui typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession session, const XrColorSpaceFB colorspace); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateColorSpacesFB( XrSession session, uint32_t colorSpaceCapacityInput, @@ -2289,7 +3204,1354 @@ XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateColorSpacesFB( XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB( XrSession session, const XrColorSpaceFB colorspace); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_hand_tracking_mesh 1 +#define XR_FB_hand_tracking_mesh_SPEC_VERSION 2 +#define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh" +typedef struct XrVector4sFB { + int16_t x; + int16_t y; + int16_t z; + int16_t w; +} XrVector4sFB; + +typedef struct XrHandTrackingMeshFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t jointCapacityInput; + uint32_t jointCountOutput; + XrPosef* jointBindPoses; + float* jointRadii; + XrHandJointEXT* jointParents; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector3f* vertexPositions; + XrVector3f* vertexNormals; + XrVector2f* vertexUVs; + XrVector4sFB* vertexBlendIndices; + XrVector4f* vertexBlendWeights; + uint32_t indexCapacityInput; + uint32_t indexCountOutput; + int16_t* indices; +} XrHandTrackingMeshFB; + +// XrHandTrackingScaleFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingScaleFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + float sensorOutput; + float currentOutput; + XrBool32 overrideHandScale; + float overrideValueInput; +} XrHandTrackingScaleFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetHandMeshFB)(XrHandTrackerEXT handTracker, XrHandTrackingMeshFB* mesh); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB( + XrHandTrackerEXT handTracker, + XrHandTrackingMeshFB* mesh); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_hand_tracking_aim 1 +#define XR_FB_hand_tracking_aim_SPEC_VERSION 2 +#define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim" +typedef XrFlags64 XrHandTrackingAimFlagsFB; + +// Flag bits for XrHandTrackingAimFlagsFB +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB = 0x00000001; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_VALID_BIT_FB = 0x00000002; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB = 0x00000004; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB = 0x00000008; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB = 0x00000010; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB = 0x00000020; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB = 0x00000040; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080; +static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100; + +// XrHandTrackingAimStateFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingAimStateFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrHandTrackingAimFlagsFB status; + XrPosef aimPose; + float pinchStrengthIndex; + float pinchStrengthMiddle; + float pinchStrengthRing; + float pinchStrengthLittle; +} XrHandTrackingAimStateFB; + + + +#define XR_FB_hand_tracking_capsules 1 +#define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2 +#define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19 +#define XR_FB_hand_tracking_capsules_SPEC_VERSION 3 +#define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules" +#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB +#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB +typedef struct XrHandCapsuleFB { + XrVector3f points[XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB]; + float radius; + XrHandJointEXT joint; +} XrHandCapsuleFB; + +// XrHandTrackingCapsulesStateFB extends XrHandJointLocationsEXT +typedef struct XrHandTrackingCapsulesStateFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrHandCapsuleFB capsules[XR_HAND_TRACKING_CAPSULE_COUNT_FB]; +} XrHandTrackingCapsulesStateFB; + + + +#define XR_FB_spatial_entity 1 +XR_DEFINE_ATOM(XrAsyncRequestIdFB) +#define XR_UUID_SIZE_EXT 16 +#define XR_FB_spatial_entity_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_EXTENSION_NAME "XR_FB_spatial_entity" + +typedef enum XrSpaceComponentTypeFB { + XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB = 0, + XR_SPACE_COMPONENT_TYPE_STORABLE_FB = 1, + XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB = 3, + XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB = 4, + XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB = 5, + XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB = 6, + XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB = 7, + XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceComponentTypeFB; +// XrSystemSpatialEntityPropertiesFB extends XrSystemProperties +typedef struct XrSystemSpatialEntityPropertiesFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 supportsSpatialEntity; +} XrSystemSpatialEntityPropertiesFB; + +typedef struct XrSpatialAnchorCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrPosef poseInSpace; + XrTime time; +} XrSpatialAnchorCreateInfoFB; + +typedef struct XrSpaceComponentStatusSetInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; + XrDuration timeout; +} XrSpaceComponentStatusSetInfoFB; + +typedef struct XrSpaceComponentStatusFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 enabled; + XrBool32 changePending; +} XrSpaceComponentStatusFB; + +typedef struct XrUuidEXT { + uint8_t data[XR_UUID_SIZE_EXT]; +} XrUuidEXT; + +typedef struct XrEventDataSpatialAnchorCreateCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; +} XrEventDataSpatialAnchorCreateCompleteFB; + +typedef struct XrEventDataSpaceSetStatusCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceComponentTypeFB componentType; + XrBool32 enabled; +} XrEventDataSpaceSetStatusCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFB)(XrSession session, const XrSpatialAnchorCreateInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceUuidFB)(XrSpace space, XrUuidEXT* uuid); +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSpaceSupportedComponentsFB)(XrSpace space, uint32_t componentTypeCapacityInput, uint32_t* componentTypeCountOutput, XrSpaceComponentTypeFB* componentTypes); +typedef XrResult (XRAPI_PTR *PFN_xrSetSpaceComponentStatusFB)(XrSpace space, const XrSpaceComponentStatusSetInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceComponentStatusFB)(XrSpace space, XrSpaceComponentTypeFB componentType, XrSpaceComponentStatusFB* status); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFB( + XrSession session, + const XrSpatialAnchorCreateInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceUuidFB( + XrSpace space, + XrUuidEXT* uuid); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSpaceSupportedComponentsFB( + XrSpace space, + uint32_t componentTypeCapacityInput, + uint32_t* componentTypeCountOutput, + XrSpaceComponentTypeFB* componentTypes); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetSpaceComponentStatusFB( + XrSpace space, + const XrSpaceComponentStatusSetInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceComponentStatusFB( + XrSpace space, + XrSpaceComponentTypeFB componentType, + XrSpaceComponentStatusFB* status); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_foveation 1 +XR_DEFINE_HANDLE(XrFoveationProfileFB) +#define XR_FB_foveation_SPEC_VERSION 1 +#define XR_FB_FOVEATION_EXTENSION_NAME "XR_FB_foveation" +typedef XrFlags64 XrSwapchainCreateFoveationFlagsFB; + +// Flag bits for XrSwapchainCreateFoveationFlagsFB +static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB = 0x00000001; +static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB = 0x00000002; + +typedef XrFlags64 XrSwapchainStateFoveationFlagsFB; + +// Flag bits for XrSwapchainStateFoveationFlagsFB + +typedef struct XrFoveationProfileCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; +} XrFoveationProfileCreateInfoFB; + +// XrSwapchainCreateInfoFoveationFB extends XrSwapchainCreateInfo +typedef struct XrSwapchainCreateInfoFoveationFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSwapchainCreateFoveationFlagsFB flags; +} XrSwapchainCreateInfoFoveationFB; + +typedef struct XrSwapchainStateFoveationFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrSwapchainStateFoveationFlagsFB flags; + XrFoveationProfileFB profile; +} XrSwapchainStateFoveationFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateFoveationProfileFB)(XrSession session, const XrFoveationProfileCreateInfoFB* createInfo, XrFoveationProfileFB* profile); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyFoveationProfileFB)(XrFoveationProfileFB profile); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateFoveationProfileFB( + XrSession session, + const XrFoveationProfileCreateInfoFB* createInfo, + XrFoveationProfileFB* profile); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFoveationProfileFB( + XrFoveationProfileFB profile); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_foveation_configuration 1 +#define XR_FB_foveation_configuration_SPEC_VERSION 1 +#define XR_FB_FOVEATION_CONFIGURATION_EXTENSION_NAME "XR_FB_foveation_configuration" + +typedef enum XrFoveationLevelFB { + XR_FOVEATION_LEVEL_NONE_FB = 0, + XR_FOVEATION_LEVEL_LOW_FB = 1, + XR_FOVEATION_LEVEL_MEDIUM_FB = 2, + XR_FOVEATION_LEVEL_HIGH_FB = 3, + XR_FOVEATION_LEVEL_MAX_ENUM_FB = 0x7FFFFFFF +} XrFoveationLevelFB; + +typedef enum XrFoveationDynamicFB { + XR_FOVEATION_DYNAMIC_DISABLED_FB = 0, + XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB = 1, + XR_FOVEATION_DYNAMIC_MAX_ENUM_FB = 0x7FFFFFFF +} XrFoveationDynamicFB; +// XrFoveationLevelProfileCreateInfoFB extends XrFoveationProfileCreateInfoFB +typedef struct XrFoveationLevelProfileCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrFoveationLevelFB level; + float verticalOffset; + XrFoveationDynamicFB dynamic; +} XrFoveationLevelProfileCreateInfoFB; + + + +#define XR_FB_keyboard_tracking 1 +#define XR_FB_keyboard_tracking_SPEC_VERSION 1 +#define XR_FB_KEYBOARD_TRACKING_EXTENSION_NAME "XR_FB_keyboard_tracking" +#define XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB 128 +typedef XrFlags64 XrKeyboardTrackingFlagsFB; + +// Flag bits for XrKeyboardTrackingFlagsFB +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_EXISTS_BIT_FB = 0x00000001; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_LOCAL_BIT_FB = 0x00000002; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_REMOTE_BIT_FB = 0x00000004; +static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB = 0x00000008; + +typedef XrFlags64 XrKeyboardTrackingQueryFlagsFB; + +// Flag bits for XrKeyboardTrackingQueryFlagsFB +static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB = 0x00000002; +static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB = 0x00000004; + +// XrSystemKeyboardTrackingPropertiesFB extends XrSystemProperties +typedef struct XrSystemKeyboardTrackingPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsKeyboardTracking; +} XrSystemKeyboardTrackingPropertiesFB; + +typedef struct XrKeyboardTrackingDescriptionFB { + uint64_t trackedKeyboardId; + XrVector3f size; + XrKeyboardTrackingFlagsFB flags; + char name[XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB]; +} XrKeyboardTrackingDescriptionFB; + +typedef struct XrKeyboardSpaceCreateInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint64_t trackedKeyboardId; +} XrKeyboardSpaceCreateInfoFB; + +typedef struct XrKeyboardTrackingQueryFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrKeyboardTrackingQueryFlagsFB flags; +} XrKeyboardTrackingQueryFB; + +typedef XrResult (XRAPI_PTR *PFN_xrQuerySystemTrackedKeyboardFB)(XrSession session, const XrKeyboardTrackingQueryFB* queryInfo, XrKeyboardTrackingDescriptionFB* keyboard); +typedef XrResult (XRAPI_PTR *PFN_xrCreateKeyboardSpaceFB)(XrSession session, const XrKeyboardSpaceCreateInfoFB* createInfo, XrSpace* keyboardSpace); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrQuerySystemTrackedKeyboardFB( + XrSession session, + const XrKeyboardTrackingQueryFB* queryInfo, + XrKeyboardTrackingDescriptionFB* keyboard); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB( + XrSession session, + const XrKeyboardSpaceCreateInfoFB* createInfo, + XrSpace* keyboardSpace); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_triangle_mesh 1 +XR_DEFINE_HANDLE(XrTriangleMeshFB) +#define XR_FB_triangle_mesh_SPEC_VERSION 2 +#define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh" + +typedef enum XrWindingOrderFB { + XR_WINDING_ORDER_UNKNOWN_FB = 0, + XR_WINDING_ORDER_CW_FB = 1, + XR_WINDING_ORDER_CCW_FB = 2, + XR_WINDING_ORDER_MAX_ENUM_FB = 0x7FFFFFFF +} XrWindingOrderFB; +typedef XrFlags64 XrTriangleMeshFlagsFB; + +// Flag bits for XrTriangleMeshFlagsFB +static const XrTriangleMeshFlagsFB XR_TRIANGLE_MESH_MUTABLE_BIT_FB = 0x00000001; + +typedef struct XrTriangleMeshCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrTriangleMeshFlagsFB flags; + XrWindingOrderFB windingOrder; + uint32_t vertexCount; + const XrVector3f* vertexBuffer; + uint32_t triangleCount; + const uint32_t* indexBuffer; +} XrTriangleMeshCreateInfoFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateTriangleMeshFB)(XrSession session, const XrTriangleMeshCreateInfoFB* createInfo, XrTriangleMeshFB* outTriangleMesh); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyTriangleMeshFB)(XrTriangleMeshFB mesh); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetVertexBufferFB)(XrTriangleMeshFB mesh, XrVector3f** outVertexBuffer); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetIndexBufferFB)(XrTriangleMeshFB mesh, uint32_t** outIndexBuffer); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginUpdateFB)(XrTriangleMeshFB mesh); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndUpdateFB)(XrTriangleMeshFB mesh, uint32_t vertexCount, uint32_t triangleCount); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginVertexBufferUpdateFB)(XrTriangleMeshFB mesh, uint32_t* outVertexCount); +typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndVertexBufferUpdateFB)(XrTriangleMeshFB mesh); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateTriangleMeshFB( + XrSession session, + const XrTriangleMeshCreateInfoFB* createInfo, + XrTriangleMeshFB* outTriangleMesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyTriangleMeshFB( + XrTriangleMeshFB mesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetVertexBufferFB( + XrTriangleMeshFB mesh, + XrVector3f** outVertexBuffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetIndexBufferFB( + XrTriangleMeshFB mesh, + uint32_t** outIndexBuffer); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginUpdateFB( + XrTriangleMeshFB mesh); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndUpdateFB( + XrTriangleMeshFB mesh, + uint32_t vertexCount, + uint32_t triangleCount); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginVertexBufferUpdateFB( + XrTriangleMeshFB mesh, + uint32_t* outVertexCount); + +XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB( + XrTriangleMeshFB mesh); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_passthrough 1 +XR_DEFINE_HANDLE(XrPassthroughFB) +XR_DEFINE_HANDLE(XrPassthroughLayerFB) +XR_DEFINE_HANDLE(XrGeometryInstanceFB) +#define XR_FB_passthrough_SPEC_VERSION 2 +#define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough" +#define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256 + +typedef enum XrPassthroughLayerPurposeFB { + XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0, + XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1, + XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001, + XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB = 1000203002, + XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF +} XrPassthroughLayerPurposeFB; +typedef XrFlags64 XrPassthroughFlagsFB; + +// Flag bits for XrPassthroughFlagsFB +static const XrPassthroughFlagsFB XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB = 0x00000001; + +typedef XrFlags64 XrPassthroughStateChangedFlagsFB; + +// Flag bits for XrPassthroughStateChangedFlagsFB +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB = 0x00000001; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB = 0x00000002; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB = 0x00000004; +static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB = 0x00000008; + +// XrSystemPassthroughPropertiesFB extends XrSystemProperties +typedef struct XrSystemPassthroughPropertiesFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 supportsPassthrough; +} XrSystemPassthroughPropertiesFB; + +typedef struct XrPassthroughCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughFlagsFB flags; +} XrPassthroughCreateInfoFB; + +typedef struct XrPassthroughLayerCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughFB passthrough; + XrPassthroughFlagsFB flags; + XrPassthroughLayerPurposeFB purpose; +} XrPassthroughLayerCreateInfoFB; + +// XrCompositionLayerPassthroughFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerPassthroughFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerFlags flags; + XrSpace space; + XrPassthroughLayerFB layerHandle; +} XrCompositionLayerPassthroughFB; + +typedef struct XrGeometryInstanceCreateInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughLayerFB layer; + XrTriangleMeshFB mesh; + XrSpace baseSpace; + XrPosef pose; + XrVector3f scale; +} XrGeometryInstanceCreateInfoFB; + +typedef struct XrGeometryInstanceTransformFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace baseSpace; + XrTime time; + XrPosef pose; + XrVector3f scale; +} XrGeometryInstanceTransformFB; + +typedef struct XrPassthroughStyleFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float textureOpacityFactor; + XrColor4f edgeColor; +} XrPassthroughStyleFB; + +// XrPassthroughColorMapMonoToRgbaFB extends XrPassthroughStyleFB +typedef struct XrPassthroughColorMapMonoToRgbaFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; +} XrPassthroughColorMapMonoToRgbaFB; + +// XrPassthroughColorMapMonoToMonoFB extends XrPassthroughStyleFB +typedef struct XrPassthroughColorMapMonoToMonoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB]; +} XrPassthroughColorMapMonoToMonoFB; + +// XrPassthroughBrightnessContrastSaturationFB extends XrPassthroughStyleFB +typedef struct XrPassthroughBrightnessContrastSaturationFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float brightness; + float contrast; + float saturation; +} XrPassthroughBrightnessContrastSaturationFB; + +typedef struct XrEventDataPassthroughStateChangedFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPassthroughStateChangedFlagsFB flags; +} XrEventDataPassthroughStateChangedFB; + +typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughFB)(XrSession session, const XrPassthroughCreateInfoFB* createInfo, XrPassthroughFB* outPassthrough); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughStartFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughPauseFB)(XrPassthroughFB passthrough); +typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughLayerFB)(XrSession session, const XrPassthroughLayerCreateInfoFB* createInfo, XrPassthroughLayerFB* outLayer); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughLayerFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerPauseFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerResumeFB)(XrPassthroughLayerFB layer); +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetStyleFB)(XrPassthroughLayerFB layer, const XrPassthroughStyleFB* style); +typedef XrResult (XRAPI_PTR *PFN_xrCreateGeometryInstanceFB)(XrSession session, const XrGeometryInstanceCreateInfoFB* createInfo, XrGeometryInstanceFB* outGeometryInstance); +typedef XrResult (XRAPI_PTR *PFN_xrDestroyGeometryInstanceFB)(XrGeometryInstanceFB instance); +typedef XrResult (XRAPI_PTR *PFN_xrGeometryInstanceSetTransformFB)(XrGeometryInstanceFB instance, const XrGeometryInstanceTransformFB* transformation); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughFB( + XrSession session, + const XrPassthroughCreateInfoFB* createInfo, + XrPassthroughFB* outPassthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughStartFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughPauseFB( + XrPassthroughFB passthrough); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughLayerFB( + XrSession session, + const XrPassthroughLayerCreateInfoFB* createInfo, + XrPassthroughLayerFB* outLayer); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughLayerFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerPauseFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerResumeFB( + XrPassthroughLayerFB layer); + +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetStyleFB( + XrPassthroughLayerFB layer, + const XrPassthroughStyleFB* style); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateGeometryInstanceFB( + XrSession session, + const XrGeometryInstanceCreateInfoFB* createInfo, + XrGeometryInstanceFB* outGeometryInstance); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroyGeometryInstanceFB( + XrGeometryInstanceFB instance); + +XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB( + XrGeometryInstanceFB instance, + const XrGeometryInstanceTransformFB* transformation); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_render_model 1 + +#define XR_NULL_RENDER_MODEL_KEY_FB 0 + +XR_DEFINE_ATOM(XrRenderModelKeyFB) +#define XR_FB_render_model_SPEC_VERSION 2 +#define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model" +#define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64 +typedef XrFlags64 XrRenderModelFlagsFB; + +// Flag bits for XrRenderModelFlagsFB +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB = 0x00000001; +static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB = 0x00000002; + +typedef struct XrRenderModelPathInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrPath path; +} XrRenderModelPathInfoFB; + +typedef struct XrRenderModelPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t vendorId; + char modelName[XR_MAX_RENDER_MODEL_NAME_SIZE_FB]; + XrRenderModelKeyFB modelKey; + uint32_t modelVersion; + XrRenderModelFlagsFB flags; +} XrRenderModelPropertiesFB; + +typedef struct XrRenderModelBufferFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t bufferCapacityInput; + uint32_t bufferCountOutput; + uint8_t* buffer; +} XrRenderModelBufferFB; + +typedef struct XrRenderModelLoadInfoFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrRenderModelKeyFB modelKey; +} XrRenderModelLoadInfoFB; + +// XrSystemRenderModelPropertiesFB extends XrSystemProperties +typedef struct XrSystemRenderModelPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsRenderModelLoading; +} XrSystemRenderModelPropertiesFB; + +// XrRenderModelCapabilitiesRequestFB extends XrSystemProperties +typedef struct XrRenderModelCapabilitiesRequestFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrRenderModelFlagsFB flags; +} XrRenderModelCapabilitiesRequestFB; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths); +typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties); +typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateRenderModelPathsFB( + XrSession session, + uint32_t pathCapacityInput, + uint32_t* pathCountOutput, + XrRenderModelPathInfoFB* paths); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetRenderModelPropertiesFB( + XrSession session, + XrPath path, + XrRenderModelPropertiesFB* properties); + +XRAPI_ATTR XrResult XRAPI_CALL xrLoadRenderModelFB( + XrSession session, + const XrRenderModelLoadInfoFB* info, + XrRenderModelBufferFB* buffer); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_foveated_rendering 1 +#define XR_VARJO_foveated_rendering_SPEC_VERSION 2 +#define XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME "XR_VARJO_foveated_rendering" +// XrViewLocateFoveatedRenderingVARJO extends XrViewLocateInfo +typedef struct XrViewLocateFoveatedRenderingVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 foveatedRenderingActive; +} XrViewLocateFoveatedRenderingVARJO; + +// XrFoveatedViewConfigurationViewVARJO extends XrViewConfigurationView +typedef struct XrFoveatedViewConfigurationViewVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 foveatedRenderingActive; +} XrFoveatedViewConfigurationViewVARJO; + +// XrSystemFoveatedRenderingPropertiesVARJO extends XrSystemProperties +typedef struct XrSystemFoveatedRenderingPropertiesVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsFoveatedRendering; +} XrSystemFoveatedRenderingPropertiesVARJO; + + + +#define XR_VARJO_composition_layer_depth_test 1 +#define XR_VARJO_composition_layer_depth_test_SPEC_VERSION 2 +#define XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_VARJO_composition_layer_depth_test" +// XrCompositionLayerDepthTestVARJO extends XrCompositionLayerProjection +typedef struct XrCompositionLayerDepthTestVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float depthTestRangeNearZ; + float depthTestRangeFarZ; +} XrCompositionLayerDepthTestVARJO; + + + +#define XR_VARJO_environment_depth_estimation 1 +#define XR_VARJO_environment_depth_estimation_SPEC_VERSION 1 +#define XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME "XR_VARJO_environment_depth_estimation" +typedef XrResult (XRAPI_PTR *PFN_xrSetEnvironmentDepthEstimationVARJO)(XrSession session, XrBool32 enabled); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetEnvironmentDepthEstimationVARJO( + XrSession session, + XrBool32 enabled); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_marker_tracking 1 +#define XR_VARJO_marker_tracking_SPEC_VERSION 1 +#define XR_VARJO_MARKER_TRACKING_EXTENSION_NAME "XR_VARJO_marker_tracking" +// XrSystemMarkerTrackingPropertiesVARJO extends XrSystemProperties +typedef struct XrSystemMarkerTrackingPropertiesVARJO { + XrStructureType type; + void* XR_MAY_ALIAS next; + XrBool32 supportsMarkerTracking; +} XrSystemMarkerTrackingPropertiesVARJO; + +typedef struct XrEventDataMarkerTrackingUpdateVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t markerId; + XrBool32 isActive; + XrBool32 isPredicted; + XrTime time; +} XrEventDataMarkerTrackingUpdateVARJO; + +typedef struct XrMarkerSpaceCreateInfoVARJO { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint64_t markerId; + XrPosef poseInMarkerSpace; +} XrMarkerSpaceCreateInfoVARJO; + +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingVARJO)(XrSession session, XrBool32 enabled); +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingTimeoutVARJO)(XrSession session, uint64_t markerId, XrDuration timeout); +typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingPredictionVARJO)(XrSession session, uint64_t markerId, XrBool32 enabled); +typedef XrResult (XRAPI_PTR *PFN_xrGetMarkerSizeVARJO)(XrSession session, uint64_t markerId, XrExtent2Df* size); +typedef XrResult (XRAPI_PTR *PFN_xrCreateMarkerSpaceVARJO)(XrSession session, const XrMarkerSpaceCreateInfoVARJO* createInfo, XrSpace* space); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingVARJO( + XrSession session, + XrBool32 enabled); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingTimeoutVARJO( + XrSession session, + uint64_t markerId, + XrDuration timeout); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingPredictionVARJO( + XrSession session, + uint64_t markerId, + XrBool32 enabled); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetMarkerSizeVARJO( + XrSession session, + uint64_t markerId, + XrExtent2Df* size); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO( + XrSession session, + const XrMarkerSpaceCreateInfoVARJO* createInfo, + XrSpace* space); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_VARJO_view_offset 1 +#define XR_VARJO_view_offset_SPEC_VERSION 1 +#define XR_VARJO_VIEW_OFFSET_EXTENSION_NAME "XR_VARJO_view_offset" +typedef XrResult (XRAPI_PTR *PFN_xrSetViewOffsetVARJO)(XrSession session, float offset); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetViewOffsetVARJO( + XrSession session, + float offset); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_MSFT_spatial_anchor_persistence 1 +XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT) +#define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256 +#define XR_MSFT_spatial_anchor_persistence_SPEC_VERSION 2 +#define XR_MSFT_SPATIAL_ANCHOR_PERSISTENCE_EXTENSION_NAME "XR_MSFT_spatial_anchor_persistence" +typedef struct XrSpatialAnchorPersistenceNameMSFT { + char name[XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT]; +} XrSpatialAnchorPersistenceNameMSFT; + +typedef struct XrSpatialAnchorPersistenceInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName; + XrSpatialAnchorMSFT spatialAnchor; +} XrSpatialAnchorPersistenceInfoMSFT; + +typedef struct XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore; + XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName; +} XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT; + +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorStoreConnectionMSFT)(XrSession session, XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore); +typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorStoreConnectionMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); +typedef XrResult (XRAPI_PTR *PFN_xrPersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo); +typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, uint32_t spatialAnchorNamesCapacityInput, uint32_t* spatialAnchorNamesCountOutput, XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames); +typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPersistedNameMSFT)(XrSession session, const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, XrSpatialAnchorMSFT* spatialAnchor); +typedef XrResult (XRAPI_PTR *PFN_xrUnpersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName); +typedef XrResult (XRAPI_PTR *PFN_xrClearSpatialAnchorStoreMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorStoreConnectionMSFT( + XrSession session, + XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore); + +XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorStoreConnectionMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); + +XRAPI_ATTR XrResult XRAPI_CALL xrPersistSpatialAnchorMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo); + +XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePersistedSpatialAnchorNamesMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + uint32_t spatialAnchorNamesCapacityInput, + uint32_t* spatialAnchorNamesCountOutput, + XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames); + +XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPersistedNameMSFT( + XrSession session, + const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, + XrSpatialAnchorMSFT* spatialAnchor); + +XRAPI_ATTR XrResult XRAPI_CALL xrUnpersistSpatialAnchorMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, + const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName); + +XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT( + XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_ULTRALEAP_hand_tracking_forearm 1 + +#define XR_HAND_FOREARM_JOINT_COUNT_ULTRALEAP 27 + +#define XR_ULTRALEAP_hand_tracking_forearm_SPEC_VERSION 1 +#define XR_ULTRALEAP_HAND_TRACKING_FOREARM_EXTENSION_NAME "XR_ULTRALEAP_hand_tracking_forearm" + +typedef enum XrHandForearmJointULTRALEAP { + XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP = 0, + XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP = 1, + XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP = 2, + XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP = 3, + XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP = 4, + XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP = 5, + XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP = 6, + XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP = 7, + XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP = 8, + XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP = 9, + XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP = 10, + XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP = 11, + XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP = 12, + XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP = 13, + XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP = 14, + XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP = 15, + XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP = 16, + XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP = 17, + XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP = 18, + XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP = 19, + XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP = 20, + XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP = 21, + XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP = 22, + XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP = 23, + XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP = 24, + XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP = 25, + XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP = 26, + XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP = 0x7FFFFFFF +} XrHandForearmJointULTRALEAP; + + +#define XR_FB_spatial_entity_query 1 +#define XR_FB_spatial_entity_query_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_QUERY_EXTENSION_NAME "XR_FB_spatial_entity_query" + +typedef enum XrSpaceQueryActionFB { + XR_SPACE_QUERY_ACTION_LOAD_FB = 0, + XR_SPACE_QUERY_ACTION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceQueryActionFB; + +typedef enum XrSpaceStorageLocationFB { + XR_SPACE_STORAGE_LOCATION_INVALID_FB = 0, + XR_SPACE_STORAGE_LOCATION_LOCAL_FB = 1, + XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpaceStorageLocationFB; +typedef struct XR_MAY_ALIAS XrSpaceQueryInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceQueryInfoBaseHeaderFB; + +typedef struct XR_MAY_ALIAS XrSpaceFilterInfoBaseHeaderFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; +} XrSpaceFilterInfoBaseHeaderFB; + +typedef struct XrSpaceQueryInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceQueryActionFB queryAction; + uint32_t maxResultCount; + XrDuration timeout; + const XrSpaceFilterInfoBaseHeaderFB* filter; + const XrSpaceFilterInfoBaseHeaderFB* excludeFilter; +} XrSpaceQueryInfoFB; + +// XrSpaceStorageLocationFilterInfoFB extends XrSpaceFilterInfoBaseHeaderFB +typedef struct XrSpaceStorageLocationFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceStorageLocationFB location; +} XrSpaceStorageLocationFilterInfoFB; + +typedef struct XrSpaceUuidFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCount; + XrUuidEXT* uuids; +} XrSpaceUuidFilterInfoFB; + +typedef struct XrSpaceComponentFilterInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpaceComponentTypeFB componentType; +} XrSpaceComponentFilterInfoFB; + +typedef struct XrSpaceQueryResultFB { + XrSpace space; + XrUuidEXT uuid; +} XrSpaceQueryResultFB; + +typedef struct XrSpaceQueryResultsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t resultCapacityInput; + uint32_t resultCountOutput; + XrSpaceQueryResultFB* results; +} XrSpaceQueryResultsFB; + +typedef struct XrEventDataSpaceQueryResultsAvailableFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; +} XrEventDataSpaceQueryResultsAvailableFB; + +typedef struct XrEventDataSpaceQueryCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; +} XrEventDataSpaceQueryCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrQuerySpacesFB)(XrSession session, const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrRetrieveSpaceQueryResultsFB)(XrSession session, XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrQuerySpacesFB( + XrSession session, + const XrSpaceQueryInfoBaseHeaderFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrRetrieveSpaceQueryResultsFB( + XrSession session, + XrAsyncRequestIdFB requestId, + XrSpaceQueryResultsFB* results); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_storage 1 +#define XR_FB_spatial_entity_storage_SPEC_VERSION 1 +#define XR_FB_SPATIAL_ENTITY_STORAGE_EXTENSION_NAME "XR_FB_spatial_entity_storage" + +typedef enum XrSpacePersistenceModeFB { + XR_SPACE_PERSISTENCE_MODE_INVALID_FB = 0, + XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB = 1, + XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB = 0x7FFFFFFF +} XrSpacePersistenceModeFB; +typedef struct XrSpaceSaveInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; + XrSpacePersistenceModeFB persistenceMode; +} XrSpaceSaveInfoFB; + +typedef struct XrSpaceEraseInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrSpace space; + XrSpaceStorageLocationFB location; +} XrSpaceEraseInfoFB; + +typedef struct XrEventDataSpaceSaveCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceSaveCompleteFB; + +typedef struct XrEventDataSpaceEraseCompleteFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrAsyncRequestIdFB requestId; + XrResult result; + XrSpace space; + XrUuidEXT uuid; + XrSpaceStorageLocationFB location; +} XrEventDataSpaceEraseCompleteFB; + +typedef XrResult (XRAPI_PTR *PFN_xrSaveSpaceFB)(XrSession session, const XrSpaceSaveInfoFB* info, XrAsyncRequestIdFB* requestId); +typedef XrResult (XRAPI_PTR *PFN_xrEraseSpaceFB)(XrSession session, const XrSpaceEraseInfoFB* info, XrAsyncRequestIdFB* requestId); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSaveSpaceFB( + XrSession session, + const XrSpaceSaveInfoFB* info, + XrAsyncRequestIdFB* requestId); + +XRAPI_ATTR XrResult XRAPI_CALL xrEraseSpaceFB( + XrSession session, + const XrSpaceEraseInfoFB* info, + XrAsyncRequestIdFB* requestId); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_space_warp 1 +#define XR_FB_space_warp_SPEC_VERSION 2 +#define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp" +typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB; + +// Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB +static const XrCompositionLayerSpaceWarpInfoFlagsFB XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB = 0x00000001; + +// XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView +typedef struct XrCompositionLayerSpaceWarpInfoFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSpaceWarpInfoFlagsFB layerFlags; + XrSwapchainSubImage motionVectorSubImage; + XrPosef appSpaceDeltaPose; + XrSwapchainSubImage depthSubImage; + float minDepth; + float maxDepth; + float nearZ; + float farZ; +} XrCompositionLayerSpaceWarpInfoFB; + +// XrSystemSpaceWarpPropertiesFB extends XrSystemProperties +typedef struct XrSystemSpaceWarpPropertiesFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t recommendedMotionVectorImageRectWidth; + uint32_t recommendedMotionVectorImageRectHeight; +} XrSystemSpaceWarpPropertiesFB; + + + +#define XR_FB_scene 1 +#define XR_FB_scene_SPEC_VERSION 1 +#define XR_FB_SCENE_EXTENSION_NAME "XR_FB_scene" +typedef struct XrExtent3DfFB { + float width; + float height; + float depth; +} XrExtent3DfFB; + +typedef struct XrOffset3DfFB { + float x; + float y; + float z; +} XrOffset3DfFB; + +typedef struct XrRect3DfFB { + XrOffset3DfFB offset; + XrExtent3DfFB extent; +} XrRect3DfFB; + +typedef struct XrSemanticLabelsFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t bufferCapacityInput; + uint32_t bufferCountOutput; + char* buffer; +} XrSemanticLabelsFB; + +typedef struct XrRoomLayoutFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrUuidEXT floorUuid; + XrUuidEXT ceilingUuid; + uint32_t wallUuidCapacityInput; + uint32_t wallUuidCountOutput; + XrUuidEXT* wallUuids; +} XrRoomLayoutFB; + +typedef struct XrBoundary2DFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t vertexCapacityInput; + uint32_t vertexCountOutput; + XrVector2f* vertices; +} XrBoundary2DFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundingBox2DFB)(XrSession session, XrSpace space, XrRect2Df* boundingBox2DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundingBox3DFB)(XrSession session, XrSpace space, XrRect3DfFB* boundingBox3DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceSemanticLabelsFB)(XrSession session, XrSpace space, XrSemanticLabelsFB* semanticLabelsOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceBoundary2DFB)(XrSession session, XrSpace space, XrBoundary2DFB* boundary2DOutput); +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceRoomLayoutFB)(XrSession session, XrSpace space, XrRoomLayoutFB* roomLayoutOutput); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundingBox2DFB( + XrSession session, + XrSpace space, + XrRect2Df* boundingBox2DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundingBox3DFB( + XrSession session, + XrSpace space, + XrRect3DfFB* boundingBox3DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceSemanticLabelsFB( + XrSession session, + XrSpace space, + XrSemanticLabelsFB* semanticLabelsOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceBoundary2DFB( + XrSession session, + XrSpace space, + XrBoundary2DFB* boundary2DOutput); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceRoomLayoutFB( + XrSession session, + XrSpace space, + XrRoomLayoutFB* roomLayoutOutput); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_palm_pose 1 +#define XR_EXT_palm_pose_SPEC_VERSION 2 +#define XR_EXT_PALM_POSE_EXTENSION_NAME "XR_EXT_palm_pose" + + +#define XR_ALMALENCE_digital_lens_control 1 +#define XR_ALMALENCE_digital_lens_control_SPEC_VERSION 1 +#define XR_ALMALENCE_DIGITAL_LENS_CONTROL_EXTENSION_NAME "XR_ALMALENCE_digital_lens_control" +typedef XrFlags64 XrDigitalLensControlFlagsALMALENCE; + +// Flag bits for XrDigitalLensControlFlagsALMALENCE +static const XrDigitalLensControlFlagsALMALENCE XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE = 0x00000001; + +typedef struct XrDigitalLensControlALMALENCE { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrDigitalLensControlFlagsALMALENCE flags; +} XrDigitalLensControlALMALENCE; + +typedef XrResult (XRAPI_PTR *PFN_xrSetDigitalLensControlALMALENCE)(XrSession session, const XrDigitalLensControlALMALENCE* digitalLensControl); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE( + XrSession session, + const XrDigitalLensControlALMALENCE* digitalLensControl); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_spatial_entity_container 1 +#define XR_FB_spatial_entity_container_SPEC_VERSION 2 +#define XR_FB_SPATIAL_ENTITY_CONTAINER_EXTENSION_NAME "XR_FB_spatial_entity_container" +typedef struct XrSpaceContainerFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + uint32_t uuidCapacityInput; + uint32_t uuidCountOutput; + XrUuidEXT* uuids; +} XrSpaceContainerFB; + +typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceContainerFB)(XrSession session, XrSpace space, XrSpaceContainerFB* spaceContainerOutput); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceContainerFB( + XrSession session, + XrSpace space, + XrSpaceContainerFB* spaceContainerOutput); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_passthrough_keyboard_hands 1 +#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 2 +#define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands" +typedef struct XrPassthroughKeyboardHandsIntensityFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + float leftHandIntensity; + float rightHandIntensity; +} XrPassthroughKeyboardHandsIntensityFB; + +typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB)(XrPassthroughLayerFB layer, const XrPassthroughKeyboardHandsIntensityFB* intensity); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB( + XrPassthroughLayerFB layer, + const XrPassthroughKeyboardHandsIntensityFB* intensity); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_FB_composition_layer_settings 1 +#define XR_FB_composition_layer_settings_SPEC_VERSION 1 +#define XR_FB_COMPOSITION_LAYER_SETTINGS_EXTENSION_NAME "XR_FB_composition_layer_settings" +typedef XrFlags64 XrCompositionLayerSettingsFlagsFB; + +// Flag bits for XrCompositionLayerSettingsFlagsFB +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB = 0x00000001; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB = 0x00000002; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB = 0x00000004; +static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB = 0x00000008; + +// XrCompositionLayerSettingsFB extends XrCompositionLayerBaseHeader +typedef struct XrCompositionLayerSettingsFB { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrCompositionLayerSettingsFlagsFB layerFlags; +} XrCompositionLayerSettingsFB; + + + +#define XR_META_performance_metrics 1 +#define XR_META_performance_metrics_SPEC_VERSION 1 +#define XR_META_PERFORMANCE_METRICS_EXTENSION_NAME "XR_META_performance_metrics" + +typedef enum XrPerformanceMetricsCounterUnitMETA { + XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META = 0, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META = 1, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META = 2, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META = 3, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META = 4, + XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META = 0x7FFFFFFF +} XrPerformanceMetricsCounterUnitMETA; +typedef XrFlags64 XrPerformanceMetricsCounterFlagsMETA; + +// Flag bits for XrPerformanceMetricsCounterFlagsMETA +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META = 0x00000001; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META = 0x00000002; +static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META = 0x00000004; + +typedef struct XrPerformanceMetricsStateMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrBool32 enabled; +} XrPerformanceMetricsStateMETA; + +typedef struct XrPerformanceMetricsCounterMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + XrPerformanceMetricsCounterFlagsMETA counterFlags; + XrPerformanceMetricsCounterUnitMETA counterUnit; + uint32_t uintValue; + float floatValue; +} XrPerformanceMetricsCounterMETA; + +typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePerformanceMetricsCounterPathsMETA)(XrInstance instance, uint32_t counterPathCapacityInput, uint32_t* counterPathCountOutput, XrPath* counterPaths); +typedef XrResult (XRAPI_PTR *PFN_xrSetPerformanceMetricsStateMETA)(XrSession session, const XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrGetPerformanceMetricsStateMETA)(XrSession session, XrPerformanceMetricsStateMETA* state); +typedef XrResult (XRAPI_PTR *PFN_xrQueryPerformanceMetricsCounterMETA)(XrSession session, XrPath counterPath, XrPerformanceMetricsCounterMETA* counter); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePerformanceMetricsCounterPathsMETA( + XrInstance instance, + uint32_t counterPathCapacityInput, + uint32_t* counterPathCountOutput, + XrPath* counterPaths); + +XRAPI_ATTR XrResult XRAPI_CALL xrSetPerformanceMetricsStateMETA( + XrSession session, + const XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetPerformanceMetricsStateMETA( + XrSession session, + XrPerformanceMetricsStateMETA* state); + +XRAPI_ATTR XrResult XRAPI_CALL xrQueryPerformanceMetricsCounterMETA( + XrSession session, + XrPath counterPath, + XrPerformanceMetricsCounterMETA* counter); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ + + +#define XR_EXT_uuid 1 +#define XR_EXT_uuid_SPEC_VERSION 1 +#define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid" #ifdef __cplusplus } diff --git a/ext/openxr/openxr_platform.h b/ext/openxr/openxr_platform.h index f7e6338064..f0fbf6955a 100644 --- a/ext/openxr/openxr_platform.h +++ b/ext/openxr/openxr_platform.h @@ -2,7 +2,7 @@ #define OPENXR_PLATFORM_H_ 1 /* -** Copyright (c) 2017-2021, The Khronos Group Inc. +** Copyright (c) 2017-2022, The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 OR MIT */ @@ -35,11 +35,13 @@ typedef enum XrAndroidThreadTypeKHR { typedef XrResult (XRAPI_PTR *PFN_xrSetAndroidApplicationThreadKHR)(XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR( XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_PLATFORM_ANDROID */ #ifdef XR_USE_PLATFORM_ANDROID @@ -50,12 +52,14 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR( typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchainAndroidSurfaceKHR)(XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR( XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_PLATFORM_ANDROID */ #ifdef XR_USE_PLATFORM_ANDROID @@ -63,6 +67,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR( #define XR_KHR_android_create_instance 1 #define XR_KHR_android_create_instance_SPEC_VERSION 3 #define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance" +// XrInstanceCreateInfoAndroidKHR extends XrInstanceCreateInfo typedef struct XrInstanceCreateInfoAndroidKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -75,7 +80,7 @@ typedef struct XrInstanceCreateInfoAndroidKHR { #ifdef XR_USE_GRAPHICS_API_VULKAN #define XR_KHR_vulkan_swapchain_format_list 1 -#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 3 +#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4 #define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list" typedef struct XrVulkanSwapchainFormatListCreateInfoKHR { XrStructureType type; @@ -89,9 +94,10 @@ typedef struct XrVulkanSwapchainFormatListCreateInfoKHR { #ifdef XR_USE_GRAPHICS_API_OPENGL #define XR_KHR_opengl_enable 1 -#define XR_KHR_opengl_enable_SPEC_VERSION 9 +#define XR_KHR_opengl_enable_SPEC_VERSION 10 #define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable" #ifdef XR_USE_PLATFORM_WIN32 +// XrGraphicsBindingOpenGLWin32KHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingOpenGLWin32KHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -101,6 +107,7 @@ typedef struct XrGraphicsBindingOpenGLWin32KHR { #endif // XR_USE_PLATFORM_WIN32 #ifdef XR_USE_PLATFORM_XLIB +// XrGraphicsBindingOpenGLXlibKHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingOpenGLXlibKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -113,6 +120,7 @@ typedef struct XrGraphicsBindingOpenGLXlibKHR { #endif // XR_USE_PLATFORM_XLIB #ifdef XR_USE_PLATFORM_XCB +// XrGraphicsBindingOpenGLXcbKHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingOpenGLXcbKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -126,6 +134,7 @@ typedef struct XrGraphicsBindingOpenGLXcbKHR { #endif // XR_USE_PLATFORM_XCB #ifdef XR_USE_PLATFORM_WAYLAND +// XrGraphicsBindingOpenGLWaylandKHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingOpenGLWaylandKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -149,19 +158,22 @@ typedef struct XrGraphicsRequirementsOpenGLKHR { typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_OPENGL */ #ifdef XR_USE_GRAPHICS_API_OPENGL_ES #define XR_KHR_opengl_es_enable 1 -#define XR_KHR_opengl_es_enable_SPEC_VERSION 7 +#define XR_KHR_opengl_es_enable_SPEC_VERSION 8 #define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable" #ifdef XR_USE_PLATFORM_ANDROID +// XrGraphicsBindingOpenGLESAndroidKHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingOpenGLESAndroidKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -187,18 +199,21 @@ typedef struct XrGraphicsRequirementsOpenGLESKHR { typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLESGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_OPENGL_ES */ #ifdef XR_USE_GRAPHICS_API_VULKAN #define XR_KHR_vulkan_enable 1 -#define XR_KHR_vulkan_enable_SPEC_VERSION 7 +#define XR_KHR_vulkan_enable_SPEC_VERSION 8 #define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable" +// XrGraphicsBindingVulkanKHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingVulkanKHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -228,6 +243,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDeviceKHR)(XrInstance instan typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanInstanceExtensionsKHR( XrInstance instance, XrSystemId systemId, @@ -252,14 +268,16 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_VULKAN */ #ifdef XR_USE_GRAPHICS_API_D3D11 #define XR_KHR_D3D11_enable 1 -#define XR_KHR_D3D11_enable_SPEC_VERSION 5 +#define XR_KHR_D3D11_enable_SPEC_VERSION 9 #define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable" +// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingD3D11KHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -282,18 +300,21 @@ typedef struct XrGraphicsRequirementsD3D11KHR { typedef XrResult (XRAPI_PTR *PFN_xrGetD3D11GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_D3D11 */ #ifdef XR_USE_GRAPHICS_API_D3D12 #define XR_KHR_D3D12_enable 1 -#define XR_KHR_D3D12_enable_SPEC_VERSION 7 +#define XR_KHR_D3D12_enable_SPEC_VERSION 9 #define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable" +// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo typedef struct XrGraphicsBindingD3D12KHR { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -317,11 +338,13 @@ typedef struct XrGraphicsRequirementsD3D12KHR { typedef XrResult (XRAPI_PTR *PFN_xrGetD3D12GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_D3D12 */ #ifdef XR_USE_PLATFORM_WIN32 @@ -333,6 +356,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrConvertWin32PerformanceCounterToTimeKHR)(XrIn typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToWin32PerformanceCounterKHR)(XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrConvertWin32PerformanceCounterToTimeKHR( XrInstance instance, const LARGE_INTEGER* performanceCounter, @@ -342,7 +366,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR( XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_PLATFORM_WIN32 */ #ifdef XR_USE_TIMESPEC @@ -354,6 +379,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrConvertTimespecTimeToTimeKHR)(XrInstance inst typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToTimespecTimeKHR)(XrInstance instance, XrTime time, struct timespec* timespecTime); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimespecTimeToTimeKHR( XrInstance instance, const struct timespec* timespecTime, @@ -363,7 +389,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR( XrInstance instance, XrTime time, struct timespec* timespecTime); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_TIMESPEC */ #ifdef XR_USE_PLATFORM_ANDROID @@ -383,7 +410,7 @@ typedef struct XrLoaderInitInfoAndroidKHR { #ifdef XR_USE_GRAPHICS_API_VULKAN #define XR_KHR_vulkan_enable2 1 -#define XR_KHR_vulkan_enable2_SPEC_VERSION 1 +#define XR_KHR_vulkan_enable2_SPEC_VERSION 2 #define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2" typedef XrFlags64 XrVulkanInstanceCreateFlagsKHR; @@ -427,12 +454,13 @@ typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR; typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR; -typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR*createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult); +typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult); typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult); typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice); typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanInstanceKHR( XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, @@ -454,7 +482,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR( XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_GRAPHICS_API_VULKAN */ #ifdef XR_USE_PLATFORM_EGL @@ -462,6 +491,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR( #define XR_MNDX_egl_enable 1 #define XR_MNDX_egl_enable_SPEC_VERSION 1 #define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable" +// XrGraphicsBindingEGLMNDX extends XrSessionCreateInfo typedef struct XrGraphicsBindingEGLMNDX { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -482,6 +512,7 @@ typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT)( typedef XrResult (XRAPI_PTR *PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)(XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor); #ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPerceptionAnchorMSFT( XrSession session, IUnknown* perceptionAnchor, @@ -491,7 +522,8 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT( XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor); -#endif +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ #endif /* XR_USE_PLATFORM_WIN32 */ #ifdef XR_USE_PLATFORM_WIN32 @@ -500,6 +532,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT( #define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1 #define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment" #ifdef XR_USE_PLATFORM_WIN32 +// XrHolographicWindowAttachmentMSFT extends XrSessionCreateInfo typedef struct XrHolographicWindowAttachmentMSFT { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -522,6 +555,7 @@ static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_SYNCH static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB = 0x00000002; #ifdef XR_USE_PLATFORM_ANDROID +// XrAndroidSurfaceSwapchainCreateInfoFB extends XrSwapchainCreateInfo typedef struct XrAndroidSurfaceSwapchainCreateInfoFB { XrStructureType type; const void* XR_MAY_ALIAS next; @@ -531,6 +565,124 @@ typedef struct XrAndroidSurfaceSwapchainCreateInfoFB { #endif /* XR_USE_PLATFORM_ANDROID */ +#ifdef XR_USE_PLATFORM_WIN32 + +#define XR_OCULUS_audio_device_guid 1 +#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1 +#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid" +#define XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS 128 +typedef XrResult (XRAPI_PTR *PFN_xrGetAudioOutputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); +typedef XrResult (XRAPI_PTR *PFN_xrGetAudioInputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); + +#ifndef XR_NO_PROTOTYPES +#ifdef XR_EXTENSION_PROTOTYPES +XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioOutputDeviceGuidOculus( + XrInstance instance, + wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); + +XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus( + XrInstance instance, + wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]); +#endif /* XR_EXTENSION_PROTOTYPES */ +#endif /* !XR_NO_PROTOTYPES */ +#endif /* XR_USE_PLATFORM_WIN32 */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_FB_foveation_vulkan 1 +#define XR_FB_foveation_vulkan_SPEC_VERSION 1 +#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan" +// XrSwapchainImageFoveationVulkanFB extends XrSwapchainImageVulkanKHR +typedef struct XrSwapchainImageFoveationVulkanFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + VkImage image; + uint32_t width; + uint32_t height; +} XrSwapchainImageFoveationVulkanFB; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_PLATFORM_ANDROID + +#define XR_FB_swapchain_update_state_android_surface 1 +#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface" +#ifdef XR_USE_PLATFORM_ANDROID +typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + uint32_t width; + uint32_t height; +} XrSwapchainStateAndroidSurfaceDimensionsFB; +#endif // XR_USE_PLATFORM_ANDROID + +#endif /* XR_USE_PLATFORM_ANDROID */ + +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES + +#define XR_FB_swapchain_update_state_opengl_es 1 +#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es" +#ifdef XR_USE_GRAPHICS_API_OPENGL_ES +typedef struct XrSwapchainStateSamplerOpenGLESFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + EGLenum minFilter; + EGLenum magFilter; + EGLenum wrapModeS; + EGLenum wrapModeT; + EGLenum swizzleRed; + EGLenum swizzleGreen; + EGLenum swizzleBlue; + EGLenum swizzleAlpha; + float maxAnisotropy; + XrColor4f borderColor; +} XrSwapchainStateSamplerOpenGLESFB; +#endif // XR_USE_GRAPHICS_API_OPENGL_ES + +#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_FB_swapchain_update_state_vulkan 1 +#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1 +#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan" +#ifdef XR_USE_GRAPHICS_API_VULKAN +typedef struct XrSwapchainStateSamplerVulkanFB { + XrStructureType type; + void* XR_MAY_ALIAS next; + VkFilter minFilter; + VkFilter magFilter; + VkSamplerMipmapMode mipmapMode; + VkSamplerAddressMode wrapModeS; + VkSamplerAddressMode wrapModeT; + VkComponentSwizzle swizzleRed; + VkComponentSwizzle swizzleGreen; + VkComponentSwizzle swizzleBlue; + VkComponentSwizzle swizzleAlpha; + float maxAnisotropy; + XrColor4f borderColor; +} XrSwapchainStateSamplerVulkanFB; +#endif // XR_USE_GRAPHICS_API_VULKAN + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + +#ifdef XR_USE_GRAPHICS_API_VULKAN + +#define XR_META_vulkan_swapchain_create_info 1 +#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1 +#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info" +// XrVulkanSwapchainCreateInfoMETA extends XrSwapchainCreateInfo +typedef struct XrVulkanSwapchainCreateInfoMETA { + XrStructureType type; + const void* XR_MAY_ALIAS next; + VkImageCreateFlags additionalCreateFlags; + VkImageUsageFlags additionalUsageFlags; +} XrVulkanSwapchainCreateInfoMETA; + +#endif /* XR_USE_GRAPHICS_API_VULKAN */ + #ifdef __cplusplus } #endif diff --git a/ext/openxr/openxr_platform_defines.h b/ext/openxr/openxr_platform_defines.h index a7ffcb459e..31fa05a0c8 100644 --- a/ext/openxr/openxr_platform_defines.h +++ b/ext/openxr/openxr_platform_defines.h @@ -1,5 +1,5 @@ /* -** Copyright (c) 2017-2021, The Khronos Group Inc. +** Copyright (c) 2017-2022, The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 OR MIT */ diff --git a/ext/openxr/openxr_reflection.h b/ext/openxr/openxr_reflection.h index 5597c94a6e..31e2e40945 100644 --- a/ext/openxr/openxr_reflection.h +++ b/ext/openxr/openxr_reflection.h @@ -2,7 +2,7 @@ #define OPENXR_REFLECTION_H_ 1 /* -** Copyright (c) 2017-2021, The Khronos Group Inc. +** Copyright (c) 2017-2022, The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 OR MIT */ @@ -85,13 +85,37 @@ XR_ENUM_STR(XrResult); _(XR_ERROR_LOCALIZED_NAME_DUPLICATED, -48) \ _(XR_ERROR_LOCALIZED_NAME_INVALID, -49) \ _(XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, -50) \ + _(XR_ERROR_RUNTIME_UNAVAILABLE, -51) \ _(XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR, -1000003000) \ _(XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR, -1000003001) \ _(XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT, -1000039001) \ _(XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT, -1000053000) \ _(XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT, -1000055000) \ + _(XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT, -1000066000) \ + _(XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT, -1000097000) \ + _(XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT, -1000097001) \ + _(XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT, -1000097002) \ + _(XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT, -1000097003) \ + _(XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT, -1000097004) \ + _(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \ _(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \ _(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB, -1000113000) \ + _(XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB, -1000113001) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB, -1000113002) \ + _(XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB, -1000113003) \ + _(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \ + _(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \ + _(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \ + _(XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB, -1000118003) \ + _(XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB, -1000118004) \ + _(XR_ERROR_UNKNOWN_PASSTHROUGH_FB, -1000118050) \ + _(XR_ERROR_RENDER_MODEL_KEY_INVALID_FB, -1000119000) \ + _(XR_RENDER_MODEL_UNAVAILABLE_FB, 1000119020) \ + _(XR_ERROR_MARKER_NOT_TRACKED_VARJO, -1000124000) \ + _(XR_ERROR_MARKER_ID_INVALID_VARJO, -1000124001) \ + _(XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT, -1000142001) \ + _(XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT, -1000142002) \ _(XR_RESULT_MAX_ENUM, 0x7FFFFFFF) #define XR_LIST_ENUM_XrStructureType(_) \ @@ -183,9 +207,14 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR, 1000034000) \ _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, 1000039000) \ _(XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, 1000039001) \ + _(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB, 1000040000) \ + _(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB, 1000041001) \ _(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \ _(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \ _(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \ + _(XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT, 1000049001) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT, 1000049002) \ + _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT, 1000049003) \ _(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \ _(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \ _(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \ @@ -209,16 +238,118 @@ XR_ENUM_STR(XrResult); _(XR_TYPE_CONTROLLER_MODEL_STATE_MSFT, 1000055004) \ _(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, 1000059000) \ _(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT, 1000063000) \ + _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT, 1000066000) \ + _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \ _(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \ + _(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \ + _(XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT, 1000078000) \ _(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \ + _(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \ _(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \ _(XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, 1000090000) \ _(XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, 1000090001) \ _(XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, 1000090003) \ _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR, 1000091000) \ + _(XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT, 1000097000) \ + _(XR_TYPE_SCENE_CREATE_INFO_MSFT, 1000097001) \ + _(XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT, 1000097002) \ + _(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT, 1000097003) \ + _(XR_TYPE_SCENE_COMPONENTS_MSFT, 1000097004) \ + _(XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT, 1000097005) \ + _(XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT, 1000097006) \ + _(XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT, 1000097007) \ + _(XR_TYPE_SCENE_OBJECTS_MSFT, 1000097008) \ + _(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT, 1000097009) \ + _(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT, 1000097010) \ + _(XR_TYPE_SCENE_PLANES_MSFT, 1000097011) \ + _(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT, 1000097012) \ + _(XR_TYPE_SCENE_MESHES_MSFT, 1000097013) \ + _(XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT, 1000097014) \ + _(XR_TYPE_SCENE_MESH_BUFFERS_MSFT, 1000097015) \ + _(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT, 1000097016) \ + _(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT, 1000097017) \ + _(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT, 1000097018) \ + _(XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT, 1000098000) \ + _(XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT, 1000098001) \ _(XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB, 1000101000) \ + _(XR_TYPE_VIVE_TRACKER_PATHS_HTCX, 1000103000) \ + _(XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX, 1000103001) \ + _(XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC, 1000104000) \ + _(XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC, 1000104001) \ + _(XR_TYPE_FACIAL_EXPRESSIONS_HTC, 1000104002) \ _(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB, 1000108000) \ + _(XR_TYPE_HAND_TRACKING_MESH_FB, 1000110001) \ + _(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \ + _(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \ + _(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \ + _(XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB, 1000113004) \ + _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB, 1000113003) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB, 1000113007) \ + _(XR_TYPE_SPACE_COMPONENT_STATUS_FB, 1000113001) \ + _(XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB, 1000113005) \ + _(XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB, 1000113006) \ + _(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \ + _(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \ + _(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \ + _(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB, 1000115000) \ + _(XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB, 1000116009) \ + _(XR_TYPE_KEYBOARD_TRACKING_QUERY_FB, 1000116004) \ + _(XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB, 1000116002) \ + _(XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB, 1000117001) \ + _(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB, 1000118000) \ + _(XR_TYPE_PASSTHROUGH_CREATE_INFO_FB, 1000118001) \ + _(XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB, 1000118002) \ + _(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB, 1000118003) \ + _(XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB, 1000118004) \ + _(XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB, 1000118005) \ + _(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \ + _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \ + _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \ + _(XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB, 1000118023) \ + _(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \ + _(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \ + _(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \ + _(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \ + _(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \ + _(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \ + _(XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB, 1000119005) \ _(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \ + _(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \ + _(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \ + _(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO, 1000121002) \ + _(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO, 1000122000) \ + _(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO, 1000124000) \ + _(XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO, 1000124001) \ + _(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \ + _(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \ + _(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \ + _(XR_TYPE_SPACE_QUERY_INFO_FB, 1000156001) \ + _(XR_TYPE_SPACE_QUERY_RESULTS_FB, 1000156002) \ + _(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB, 1000156003) \ + _(XR_TYPE_SPACE_UUID_FILTER_INFO_FB, 1000156054) \ + _(XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB, 1000156052) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB, 1000156103) \ + _(XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB, 1000156104) \ + _(XR_TYPE_SPACE_SAVE_INFO_FB, 1000158000) \ + _(XR_TYPE_SPACE_ERASE_INFO_FB, 1000158001) \ + _(XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB, 1000158106) \ + _(XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB, 1000158107) \ + _(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \ + _(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \ + _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \ + _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB, 1000163000) \ + _(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \ + _(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \ + _(XR_TYPE_SEMANTIC_LABELS_FB, 1000175000) \ + _(XR_TYPE_ROOM_LAYOUT_FB, 1000175001) \ + _(XR_TYPE_BOUNDARY_2D_FB, 1000175002) \ + _(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \ + _(XR_TYPE_SPACE_CONTAINER_FB, 1000199000) \ + _(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \ + _(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, 1000204000) \ + _(XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META, 1000227000) \ + _(XR_TYPE_PERFORMANCE_METRICS_STATE_META, 1000232001) \ + _(XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, 1000232002) \ _(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF) #define XR_LIST_ENUM_XrFormFactor(_) \ @@ -244,6 +375,7 @@ XR_ENUM_STR(XrResult); _(XR_REFERENCE_SPACE_TYPE_LOCAL, 2) \ _(XR_REFERENCE_SPACE_TYPE_STAGE, 3) \ _(XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT, 1000038000) \ + _(XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO, 1000121000) \ _(XR_REFERENCE_SPACE_TYPE_MAX_ENUM, 0x7FFFFFFF) #define XR_LIST_ENUM_XrActionType(_) \ @@ -282,7 +414,17 @@ XR_ENUM_STR(XrResult); _(XR_OBJECT_TYPE_ACTION, 6) \ _(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \ + _(XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT, 1000049000) \ _(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \ + _(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \ + _(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \ + _(XR_OBJECT_TYPE_FACIAL_TRACKER_HTC, 1000104000) \ + _(XR_OBJECT_TYPE_FOVEATION_PROFILE_FB, 1000114000) \ + _(XR_OBJECT_TYPE_TRIANGLE_MESH_FB, 1000117000) \ + _(XR_OBJECT_TYPE_PASSTHROUGH_FB, 1000118000) \ + _(XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB, 1000118002) \ + _(XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB, 1000118004) \ + _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT, 1000142000) \ _(XR_OBJECT_TYPE_MAX_ENUM, 0x7FFFFFFF) #define XR_LIST_ENUM_XrAndroidThreadTypeKHR(_) \ @@ -322,6 +464,15 @@ XR_ENUM_STR(XrResult); _(XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT, 75) \ _(XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF) +#define XR_LIST_ENUM_XrBlendFactorFB(_) \ + _(XR_BLEND_FACTOR_ZERO_FB, 0) \ + _(XR_BLEND_FACTOR_ONE_FB, 1) \ + _(XR_BLEND_FACTOR_SRC_ALPHA_FB, 2) \ + _(XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB, 3) \ + _(XR_BLEND_FACTOR_DST_ALPHA_FB, 4) \ + _(XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB, 5) \ + _(XR_BLEND_FACTOR_MAX_ENUM_FB, 0x7FFFFFFF) + #define XR_LIST_ENUM_XrSpatialGraphNodeTypeMSFT(_) \ _(XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT, 1) \ _(XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT, 2) \ @@ -363,6 +514,7 @@ XR_ENUM_STR(XrResult); #define XR_LIST_ENUM_XrHandJointSetEXT(_) \ _(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \ + _(XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP, 1000149000) \ _(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF) #define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \ @@ -370,6 +522,133 @@ XR_ENUM_STR(XrResult); _(XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT, 1) \ _(XR_HAND_POSE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) +#define XR_LIST_ENUM_XrReprojectionModeMSFT(_) \ + _(XR_REPROJECTION_MODE_DEPTH_MSFT, 1) \ + _(XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT, 2) \ + _(XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT, 3) \ + _(XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT, 4) \ + _(XR_REPROJECTION_MODE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandJointsMotionRangeEXT(_) \ + _(XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT, 1) \ + _(XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT, 2) \ + _(XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeFeatureMSFT(_) \ + _(XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT, 1) \ + _(XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT, 2) \ + _(XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT, 3) \ + _(XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT, 4) \ + _(XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT, 1000098000) \ + _(XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeConsistencyMSFT(_) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT, 1) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT, 2) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT, 3) \ + _(XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrMeshComputeLodMSFT(_) \ + _(XR_MESH_COMPUTE_LOD_COARSE_MSFT, 1) \ + _(XR_MESH_COMPUTE_LOD_MEDIUM_MSFT, 2) \ + _(XR_MESH_COMPUTE_LOD_FINE_MSFT, 3) \ + _(XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT, 4) \ + _(XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComponentTypeMSFT(_) \ + _(XR_SCENE_COMPONENT_TYPE_INVALID_MSFT, -1) \ + _(XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT, 1) \ + _(XR_SCENE_COMPONENT_TYPE_PLANE_MSFT, 2) \ + _(XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT, 3) \ + _(XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT, 4) \ + _(XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT, 1000098000) \ + _(XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneObjectTypeMSFT(_) \ + _(XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT, -1) \ + _(XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT, 1) \ + _(XR_SCENE_OBJECT_TYPE_WALL_MSFT, 2) \ + _(XR_SCENE_OBJECT_TYPE_FLOOR_MSFT, 3) \ + _(XR_SCENE_OBJECT_TYPE_CEILING_MSFT, 4) \ + _(XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT, 5) \ + _(XR_SCENE_OBJECT_TYPE_INFERRED_MSFT, 6) \ + _(XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrScenePlaneAlignmentTypeMSFT(_) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT, 0) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT, 1) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT, 2) \ + _(XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSceneComputeStateMSFT(_) \ + _(XR_SCENE_COMPUTE_STATE_NONE_MSFT, 0) \ + _(XR_SCENE_COMPUTE_STATE_UPDATING_MSFT, 1) \ + _(XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT, 2) \ + _(XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT, 3) \ + _(XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrEyeExpressionHTC(_) \ + _(XR_EYE_EXPRESSION_LEFT_BLINK_HTC, 0) \ + _(XR_EYE_EXPRESSION_LEFT_WIDE_HTC, 1) \ + _(XR_EYE_EXPRESSION_RIGHT_BLINK_HTC, 2) \ + _(XR_EYE_EXPRESSION_RIGHT_WIDE_HTC, 3) \ + _(XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC, 4) \ + _(XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC, 5) \ + _(XR_EYE_EXPRESSION_LEFT_DOWN_HTC, 6) \ + _(XR_EYE_EXPRESSION_RIGHT_DOWN_HTC, 7) \ + _(XR_EYE_EXPRESSION_LEFT_OUT_HTC, 8) \ + _(XR_EYE_EXPRESSION_RIGHT_IN_HTC, 9) \ + _(XR_EYE_EXPRESSION_LEFT_IN_HTC, 10) \ + _(XR_EYE_EXPRESSION_RIGHT_OUT_HTC, 11) \ + _(XR_EYE_EXPRESSION_LEFT_UP_HTC, 12) \ + _(XR_EYE_EXPRESSION_RIGHT_UP_HTC, 13) \ + _(XR_EYE_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrLipExpressionHTC(_) \ + _(XR_LIP_EXPRESSION_JAW_RIGHT_HTC, 0) \ + _(XR_LIP_EXPRESSION_JAW_LEFT_HTC, 1) \ + _(XR_LIP_EXPRESSION_JAW_FORWARD_HTC, 2) \ + _(XR_LIP_EXPRESSION_JAW_OPEN_HTC, 3) \ + _(XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC, 4) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC, 5) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC, 6) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC, 7) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC, 8) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC, 9) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC, 10) \ + _(XR_LIP_EXPRESSION_MOUTH_POUT_HTC, 11) \ + _(XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC, 12) \ + _(XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC, 13) \ + _(XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC, 14) \ + _(XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC, 15) \ + _(XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC, 16) \ + _(XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC, 17) \ + _(XR_LIP_EXPRESSION_CHEEK_SUCK_HTC, 18) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC, 19) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC, 20) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC, 21) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC, 22) \ + _(XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC, 23) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC, 24) \ + _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC, 25) \ + _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC, 26) \ + _(XR_LIP_EXPRESSION_TONGUE_LEFT_HTC, 27) \ + _(XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC, 28) \ + _(XR_LIP_EXPRESSION_TONGUE_UP_HTC, 29) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWN_HTC, 30) \ + _(XR_LIP_EXPRESSION_TONGUE_ROLL_HTC, 31) \ + _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC, 32) \ + _(XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC, 33) \ + _(XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC, 34) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC, 35) \ + _(XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC, 36) \ + _(XR_LIP_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFacialTrackingTypeHTC(_) \ + _(XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC, 1) \ + _(XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC, 2) \ + _(XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC, 0x7FFFFFFF) + #define XR_LIST_ENUM_XrColorSpaceFB(_) \ _(XR_COLOR_SPACE_UNMANAGED_FB, 0) \ _(XR_COLOR_SPACE_REC2020_FB, 1) \ @@ -381,6 +660,93 @@ XR_ENUM_STR(XrResult); _(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \ _(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF) +#define XR_LIST_ENUM_XrSpaceComponentTypeFB(_) \ + _(XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB, 0) \ + _(XR_SPACE_COMPONENT_TYPE_STORABLE_FB, 1) \ + _(XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB, 3) \ + _(XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB, 4) \ + _(XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB, 5) \ + _(XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB, 6) \ + _(XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB, 7) \ + _(XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationLevelFB(_) \ + _(XR_FOVEATION_LEVEL_NONE_FB, 0) \ + _(XR_FOVEATION_LEVEL_LOW_FB, 1) \ + _(XR_FOVEATION_LEVEL_MEDIUM_FB, 2) \ + _(XR_FOVEATION_LEVEL_HIGH_FB, 3) \ + _(XR_FOVEATION_LEVEL_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrFoveationDynamicFB(_) \ + _(XR_FOVEATION_DYNAMIC_DISABLED_FB, 0) \ + _(XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB, 1) \ + _(XR_FOVEATION_DYNAMIC_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrWindingOrderFB(_) \ + _(XR_WINDING_ORDER_UNKNOWN_FB, 0) \ + _(XR_WINDING_ORDER_CW_FB, 1) \ + _(XR_WINDING_ORDER_CCW_FB, 2) \ + _(XR_WINDING_ORDER_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPassthroughLayerPurposeFB(_) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB, 1000203002) \ + _(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrHandForearmJointULTRALEAP(_) \ + _(XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP, 0) \ + _(XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP, 1) \ + _(XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP, 2) \ + _(XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP, 3) \ + _(XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP, 4) \ + _(XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP, 5) \ + _(XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP, 6) \ + _(XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP, 7) \ + _(XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP, 8) \ + _(XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP, 9) \ + _(XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP, 10) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP, 11) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP, 12) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP, 13) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP, 14) \ + _(XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP, 15) \ + _(XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP, 16) \ + _(XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP, 17) \ + _(XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP, 18) \ + _(XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP, 19) \ + _(XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP, 20) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP, 21) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP, 22) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP, 23) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP, 24) \ + _(XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP, 25) \ + _(XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP, 26) \ + _(XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceQueryActionFB(_) \ + _(XR_SPACE_QUERY_ACTION_LOAD_FB, 0) \ + _(XR_SPACE_QUERY_ACTION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpaceStorageLocationFB(_) \ + _(XR_SPACE_STORAGE_LOCATION_INVALID_FB, 0) \ + _(XR_SPACE_STORAGE_LOCATION_LOCAL_FB, 1) \ + _(XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrSpacePersistenceModeFB(_) \ + _(XR_SPACE_PERSISTENCE_MODE_INVALID_FB, 0) \ + _(XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB, 1) \ + _(XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB, 0x7FFFFFFF) + +#define XR_LIST_ENUM_XrPerformanceMetricsCounterUnitMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META, 0) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META, 1) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META, 2) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META, 3) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META, 4) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META, 0x7FFFFFFF) + #define XR_LIST_BITS_XrInstanceCreateFlags(_) #define XR_LIST_BITS_XrSessionCreateFlags(_) @@ -408,6 +774,7 @@ XR_ENUM_STR(XrResult); _(XR_SWAPCHAIN_USAGE_SAMPLED_BIT, 0x00000020) \ _(XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, 0x00000040) \ _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND, 0x00000080) \ + _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND) \ #define XR_LIST_BITS_XrCompositionLayerFlags(_) \ _(XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT, 0x00000001) \ @@ -441,16 +808,82 @@ XR_ENUM_STR(XrResult); _(XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, 0x00000004) \ _(XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT, 0x00000008) \ -#define XR_LIST_BITS_XrOverlaySessionCreateFlagsEXTX(_) \ - _(XR_OVERLAY_SESSION_CREATE_RELAXED_DISPLAY_TIME_BIT_EXTX, 0x00000001) \ +#define XR_LIST_BITS_XrOverlaySessionCreateFlagsEXTX(_) #define XR_LIST_BITS_XrOverlayMainSessionFlagsEXTX(_) \ _(XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX, 0x00000001) \ +#define XR_LIST_BITS_XrCompositionLayerImageLayoutFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB, 0x00000001) \ + #define XR_LIST_BITS_XrAndroidSurfaceSwapchainFlagsFB(_) \ _(XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB, 0x00000001) \ _(XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB, 0x00000002) \ +#define XR_LIST_BITS_XrCompositionLayerSecureContentFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB, 0x00000001) \ + _(XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrHandTrackingAimFlagsFB(_) \ + _(XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB, 0x00000001) \ + _(XR_HAND_TRACKING_AIM_VALID_BIT_FB, 0x00000002) \ + _(XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB, 0x00000004) \ + _(XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB, 0x00000008) \ + _(XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB, 0x00000010) \ + _(XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB, 0x00000020) \ + _(XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB, 0x00000040) \ + _(XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB, 0x00000080) \ + _(XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB, 0x00000100) \ + +#define XR_LIST_BITS_XrSwapchainCreateFoveationFlagsFB(_) \ + _(XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB, 0x00000001) \ + _(XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrSwapchainStateFoveationFlagsFB(_) + +#define XR_LIST_BITS_XrKeyboardTrackingFlagsFB(_) \ + _(XR_KEYBOARD_TRACKING_EXISTS_BIT_FB, 0x00000001) \ + _(XR_KEYBOARD_TRACKING_LOCAL_BIT_FB, 0x00000002) \ + _(XR_KEYBOARD_TRACKING_REMOTE_BIT_FB, 0x00000004) \ + _(XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrKeyboardTrackingQueryFlagsFB(_) \ + _(XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB, 0x00000002) \ + _(XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB, 0x00000004) \ + +#define XR_LIST_BITS_XrTriangleMeshFlagsFB(_) \ + _(XR_TRIANGLE_MESH_MUTABLE_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrPassthroughFlagsFB(_) \ + _(XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrPassthroughStateChangedFlagsFB(_) \ + _(XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB, 0x00000001) \ + _(XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB, 0x00000002) \ + _(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \ + _(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrRenderModelFlagsFB(_) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB, 0x00000001) \ + _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB, 0x00000002) \ + +#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB, 0x00000001) \ + +#define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \ + _(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \ + +#define XR_LIST_BITS_XrCompositionLayerSettingsFlagsFB(_) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB, 0x00000001) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB, 0x00000002) \ + _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB, 0x00000004) \ + _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB, 0x00000008) \ + +#define XR_LIST_BITS_XrPerformanceMetricsCounterFlagsMETA(_) \ + _(XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META, 0x00000001) \ + _(XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META, 0x00000002) \ + _(XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META, 0x00000004) \ + #define XR_LIST_STRUCT_XrApiLayerProperties(_) \ _(type) \ _(next) \ @@ -1213,6 +1646,19 @@ XR_ENUM_STR(XrResult); _(anchor) \ _(poseInAnchorSpace) \ +#define XR_LIST_STRUCT_XrCompositionLayerImageLayoutFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrCompositionLayerAlphaBlendFB(_) \ + _(type) \ + _(next) \ + _(srcFactorColor) \ + _(dstFactorColor) \ + _(srcFactorAlpha) \ + _(dstFactorAlpha) \ + #define XR_LIST_STRUCT_XrViewConfigurationDepthRangeEXT(_) \ _(type) \ _(next) \ @@ -1236,6 +1682,23 @@ XR_ENUM_STR(XrResult); _(nodeId) \ _(pose) \ +#define XR_LIST_STRUCT_XrSpatialGraphStaticNodeBindingCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesGetInfoMSFT(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesMSFT(_) \ + _(type) \ + _(next) \ + _(nodeId) \ + _(poseInNodeSpace) \ + #define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \ _(type) \ _(next) \ @@ -1404,11 +1867,45 @@ XR_ENUM_STR(XrResult); _(holographicSpace) \ _(coreWindow) \ +#define XR_LIST_STRUCT_XrCompositionLayerReprojectionInfoMSFT(_) \ + _(type) \ + _(next) \ + _(reprojectionMode) \ + +#define XR_LIST_STRUCT_XrCompositionLayerReprojectionPlaneOverrideMSFT(_) \ + _(type) \ + _(next) \ + _(position) \ + _(normal) \ + _(velocity) \ + #define XR_LIST_STRUCT_XrAndroidSurfaceSwapchainCreateInfoFB(_) \ _(type) \ _(next) \ _(createFlags) \ +#define XR_LIST_STRUCT_XrSwapchainStateBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrCompositionLayerSecureContentFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrInteractionProfileDpadBindingEXT(_) \ + _(type) \ + _(next) \ + _(binding) \ + _(actionSet) \ + _(forceThreshold) \ + _(forceThresholdReleased) \ + _(centerRegion) \ + _(wedgeAngle) \ + _(isSticky) \ + _(onHaptic) \ + _(offHaptic) \ + #define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \ _(type) \ _(next) \ @@ -1419,17 +1916,765 @@ XR_ENUM_STR(XrResult); _(onHaptic) \ _(offHaptic) \ +#define XR_LIST_STRUCT_XrHandJointsMotionRangeInfoEXT(_) \ + _(type) \ + _(next) \ + _(handJointsMotionRange) \ + +#define XR_LIST_STRUCT_XrUuidMSFT(_) \ + _(bytes) \ + +#define XR_LIST_STRUCT_XrSceneObserverCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSceneCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSceneSphereBoundMSFT(_) \ + _(center) \ + _(radius) \ + +#define XR_LIST_STRUCT_XrSceneOrientedBoxBoundMSFT(_) \ + _(pose) \ + _(extents) \ + +#define XR_LIST_STRUCT_XrSceneFrustumBoundMSFT(_) \ + _(pose) \ + _(fov) \ + _(farDistance) \ + +#define XR_LIST_STRUCT_XrSceneBoundsMSFT(_) \ + _(space) \ + _(time) \ + _(sphereCount) \ + _(spheres) \ + _(boxCount) \ + _(boxes) \ + _(frustumCount) \ + _(frustums) \ + +#define XR_LIST_STRUCT_XrNewSceneComputeInfoMSFT(_) \ + _(type) \ + _(next) \ + _(requestedFeatureCount) \ + _(requestedFeatures) \ + _(consistency) \ + _(bounds) \ + +#define XR_LIST_STRUCT_XrVisualMeshComputeLodInfoMSFT(_) \ + _(type) \ + _(next) \ + _(lod) \ + +#define XR_LIST_STRUCT_XrSceneComponentMSFT(_) \ + _(componentType) \ + _(id) \ + _(parentId) \ + _(updateTime) \ + +#define XR_LIST_STRUCT_XrSceneComponentsMSFT(_) \ + _(type) \ + _(next) \ + _(componentCapacityInput) \ + _(componentCountOutput) \ + _(components) \ + +#define XR_LIST_STRUCT_XrSceneComponentsGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(componentType) \ + +#define XR_LIST_STRUCT_XrSceneComponentLocationMSFT(_) \ + _(flags) \ + _(pose) \ + +#define XR_LIST_STRUCT_XrSceneComponentLocationsMSFT(_) \ + _(type) \ + _(next) \ + _(locationCount) \ + _(locations) \ + +#define XR_LIST_STRUCT_XrSceneComponentsLocateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + _(componentIdCount) \ + _(componentIds) \ + +#define XR_LIST_STRUCT_XrSceneObjectMSFT(_) \ + _(objectType) \ + +#define XR_LIST_STRUCT_XrSceneObjectsMSFT(_) \ + _(type) \ + _(next) \ + _(sceneObjectCount) \ + _(sceneObjects) \ + +#define XR_LIST_STRUCT_XrSceneComponentParentFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(parentId) \ + +#define XR_LIST_STRUCT_XrSceneObjectTypesFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(objectTypeCount) \ + _(objectTypes) \ + +#define XR_LIST_STRUCT_XrScenePlaneMSFT(_) \ + _(alignment) \ + _(size) \ + _(meshBufferId) \ + _(supportsIndicesUint16) \ + +#define XR_LIST_STRUCT_XrScenePlanesMSFT(_) \ + _(type) \ + _(next) \ + _(scenePlaneCount) \ + _(scenePlanes) \ + +#define XR_LIST_STRUCT_XrScenePlaneAlignmentFilterInfoMSFT(_) \ + _(type) \ + _(next) \ + _(alignmentCount) \ + _(alignments) \ + +#define XR_LIST_STRUCT_XrSceneMeshMSFT(_) \ + _(meshBufferId) \ + _(supportsIndicesUint16) \ + +#define XR_LIST_STRUCT_XrSceneMeshesMSFT(_) \ + _(type) \ + _(next) \ + _(sceneMeshCount) \ + _(sceneMeshes) \ + +#define XR_LIST_STRUCT_XrSceneMeshBuffersGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(meshBufferId) \ + +#define XR_LIST_STRUCT_XrSceneMeshBuffersMSFT(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSceneMeshVertexBufferMSFT(_) \ + _(type) \ + _(next) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + +#define XR_LIST_STRUCT_XrSceneMeshIndicesUint32MSFT(_) \ + _(type) \ + _(next) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +#define XR_LIST_STRUCT_XrSceneMeshIndicesUint16MSFT(_) \ + _(type) \ + _(next) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +#define XR_LIST_STRUCT_XrSerializedSceneFragmentDataGetInfoMSFT(_) \ + _(type) \ + _(next) \ + _(sceneFragmentId) \ + +#define XR_LIST_STRUCT_XrDeserializeSceneFragmentMSFT(_) \ + _(bufferSize) \ + _(buffer) \ + +#define XR_LIST_STRUCT_XrSceneDeserializeInfoMSFT(_) \ + _(type) \ + _(next) \ + _(fragmentCount) \ + _(fragments) \ + #define XR_LIST_STRUCT_XrEventDataDisplayRefreshRateChangedFB(_) \ _(type) \ _(next) \ _(fromDisplayRefreshRate) \ _(toDisplayRefreshRate) \ +#define XR_LIST_STRUCT_XrViveTrackerPathsHTCX(_) \ + _(type) \ + _(next) \ + _(persistentPath) \ + _(rolePath) \ + +#define XR_LIST_STRUCT_XrEventDataViveTrackerConnectedHTCX(_) \ + _(type) \ + _(next) \ + _(paths) \ + +#define XR_LIST_STRUCT_XrSystemFacialTrackingPropertiesHTC(_) \ + _(type) \ + _(next) \ + _(supportEyeFacialTracking) \ + _(supportLipFacialTracking) \ + +#define XR_LIST_STRUCT_XrFacialExpressionsHTC(_) \ + _(type) \ + _(next) \ + _(isActive) \ + _(sampleTime) \ + _(expressionCount) \ + _(expressionWeightings) \ + +#define XR_LIST_STRUCT_XrFacialTrackerCreateInfoHTC(_) \ + _(type) \ + _(next) \ + _(facialTrackingType) \ + #define XR_LIST_STRUCT_XrSystemColorSpacePropertiesFB(_) \ _(type) \ _(next) \ _(colorSpace) \ +#define XR_LIST_STRUCT_XrVector4sFB(_) \ + _(x) \ + _(y) \ + _(z) \ + _(w) \ + +#define XR_LIST_STRUCT_XrHandTrackingMeshFB(_) \ + _(type) \ + _(next) \ + _(jointCapacityInput) \ + _(jointCountOutput) \ + _(jointBindPoses) \ + _(jointRadii) \ + _(jointParents) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertexPositions) \ + _(vertexNormals) \ + _(vertexUVs) \ + _(vertexBlendIndices) \ + _(vertexBlendWeights) \ + _(indexCapacityInput) \ + _(indexCountOutput) \ + _(indices) \ + +#define XR_LIST_STRUCT_XrHandTrackingScaleFB(_) \ + _(type) \ + _(next) \ + _(sensorOutput) \ + _(currentOutput) \ + _(overrideHandScale) \ + _(overrideValueInput) \ + +#define XR_LIST_STRUCT_XrHandTrackingAimStateFB(_) \ + _(type) \ + _(next) \ + _(status) \ + _(aimPose) \ + _(pinchStrengthIndex) \ + _(pinchStrengthMiddle) \ + _(pinchStrengthRing) \ + _(pinchStrengthLittle) \ + +#define XR_LIST_STRUCT_XrHandCapsuleFB(_) \ + _(points) \ + _(radius) \ + _(joint) \ + +#define XR_LIST_STRUCT_XrHandTrackingCapsulesStateFB(_) \ + _(type) \ + _(next) \ + _(capsules) \ + +#define XR_LIST_STRUCT_XrSystemSpatialEntityPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsSpatialEntity) \ + +#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(poseInSpace) \ + _(time) \ + +#define XR_LIST_STRUCT_XrSpaceComponentStatusSetInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + _(enabled) \ + _(timeout) \ + +#define XR_LIST_STRUCT_XrSpaceComponentStatusFB(_) \ + _(type) \ + _(next) \ + _(enabled) \ + _(changePending) \ + +#define XR_LIST_STRUCT_XrUuidEXT(_) \ + _(data) \ + +#define XR_LIST_STRUCT_XrEventDataSpatialAnchorCreateCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceSetStatusCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(componentType) \ + _(enabled) \ + +#define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSwapchainCreateInfoFoveationFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrSwapchainStateFoveationFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(profile) \ + +#define XR_LIST_STRUCT_XrFoveationLevelProfileCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(level) \ + _(verticalOffset) \ + _(dynamic) \ + +#define XR_LIST_STRUCT_XrSystemKeyboardTrackingPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsKeyboardTracking) \ + +#define XR_LIST_STRUCT_XrKeyboardTrackingDescriptionFB(_) \ + _(trackedKeyboardId) \ + _(size) \ + _(flags) \ + _(name) \ + +#define XR_LIST_STRUCT_XrKeyboardSpaceCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(trackedKeyboardId) \ + +#define XR_LIST_STRUCT_XrKeyboardTrackingQueryFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrTriangleMeshCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(windingOrder) \ + _(vertexCount) \ + _(vertexBuffer) \ + _(triangleCount) \ + _(indexBuffer) \ + +#define XR_LIST_STRUCT_XrSystemPassthroughPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsPassthrough) \ + +#define XR_LIST_STRUCT_XrPassthroughCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrPassthroughLayerCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(passthrough) \ + _(flags) \ + _(purpose) \ + +#define XR_LIST_STRUCT_XrCompositionLayerPassthroughFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + _(space) \ + _(layerHandle) \ + +#define XR_LIST_STRUCT_XrGeometryInstanceCreateInfoFB(_) \ + _(type) \ + _(next) \ + _(layer) \ + _(mesh) \ + _(baseSpace) \ + _(pose) \ + _(scale) \ + +#define XR_LIST_STRUCT_XrGeometryInstanceTransformFB(_) \ + _(type) \ + _(next) \ + _(baseSpace) \ + _(time) \ + _(pose) \ + _(scale) \ + +#define XR_LIST_STRUCT_XrPassthroughStyleFB(_) \ + _(type) \ + _(next) \ + _(textureOpacityFactor) \ + _(edgeColor) \ + +#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToRgbaFB(_) \ + _(type) \ + _(next) \ + _(textureColorMap) \ + +#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToMonoFB(_) \ + _(type) \ + _(next) \ + _(textureColorMap) \ + +#define XR_LIST_STRUCT_XrPassthroughBrightnessContrastSaturationFB(_) \ + _(type) \ + _(next) \ + _(brightness) \ + _(contrast) \ + _(saturation) \ + +#define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrRenderModelPathInfoFB(_) \ + _(type) \ + _(next) \ + _(path) \ + +#define XR_LIST_STRUCT_XrRenderModelPropertiesFB(_) \ + _(type) \ + _(next) \ + _(vendorId) \ + _(modelName) \ + _(modelKey) \ + _(modelVersion) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrRenderModelBufferFB(_) \ + _(type) \ + _(next) \ + _(bufferCapacityInput) \ + _(bufferCountOutput) \ + _(buffer) \ + +#define XR_LIST_STRUCT_XrRenderModelLoadInfoFB(_) \ + _(type) \ + _(next) \ + _(modelKey) \ + +#define XR_LIST_STRUCT_XrSystemRenderModelPropertiesFB(_) \ + _(type) \ + _(next) \ + _(supportsRenderModelLoading) \ + +#define XR_LIST_STRUCT_XrRenderModelCapabilitiesRequestFB(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \ + _(type) \ + _(next) \ + _(foveatedRenderingActive) \ + +#define XR_LIST_STRUCT_XrFoveatedViewConfigurationViewVARJO(_) \ + _(type) \ + _(next) \ + _(foveatedRenderingActive) \ + +#define XR_LIST_STRUCT_XrSystemFoveatedRenderingPropertiesVARJO(_) \ + _(type) \ + _(next) \ + _(supportsFoveatedRendering) \ + +#define XR_LIST_STRUCT_XrCompositionLayerDepthTestVARJO(_) \ + _(type) \ + _(next) \ + _(depthTestRangeNearZ) \ + _(depthTestRangeFarZ) \ + +#define XR_LIST_STRUCT_XrSystemMarkerTrackingPropertiesVARJO(_) \ + _(type) \ + _(next) \ + _(supportsMarkerTracking) \ + +#define XR_LIST_STRUCT_XrEventDataMarkerTrackingUpdateVARJO(_) \ + _(type) \ + _(next) \ + _(markerId) \ + _(isActive) \ + _(isPredicted) \ + _(time) \ + +#define XR_LIST_STRUCT_XrMarkerSpaceCreateInfoVARJO(_) \ + _(type) \ + _(next) \ + _(markerId) \ + _(poseInMarkerSpace) \ + +#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceNameMSFT(_) \ + _(name) \ + +#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceInfoMSFT(_) \ + _(type) \ + _(next) \ + _(spatialAnchorPersistenceName) \ + _(spatialAnchor) \ + +#define XR_LIST_STRUCT_XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT(_) \ + _(type) \ + _(next) \ + _(spatialAnchorStore) \ + _(spatialAnchorPersistenceName) \ + +#define XR_LIST_STRUCT_XrSpaceQueryInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpaceFilterInfoBaseHeaderFB(_) \ + _(type) \ + _(next) \ + +#define XR_LIST_STRUCT_XrSpaceQueryInfoFB(_) \ + _(type) \ + _(next) \ + _(queryAction) \ + _(maxResultCount) \ + _(timeout) \ + _(filter) \ + _(excludeFilter) \ + +#define XR_LIST_STRUCT_XrSpaceStorageLocationFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(location) \ + +#define XR_LIST_STRUCT_XrSpaceUuidFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(uuidCount) \ + _(uuids) \ + +#define XR_LIST_STRUCT_XrSpaceComponentFilterInfoFB(_) \ + _(type) \ + _(next) \ + _(componentType) \ + +#define XR_LIST_STRUCT_XrSpaceQueryResultFB(_) \ + _(space) \ + _(uuid) \ + +#define XR_LIST_STRUCT_XrSpaceQueryResultsFB(_) \ + _(type) \ + _(next) \ + _(resultCapacityInput) \ + _(resultCountOutput) \ + _(results) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceQueryResultsAvailableFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceQueryCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + +#define XR_LIST_STRUCT_XrSpaceSaveInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + _(persistenceMode) \ + +#define XR_LIST_STRUCT_XrSpaceEraseInfoFB(_) \ + _(type) \ + _(next) \ + _(space) \ + _(location) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceSaveCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + +#define XR_LIST_STRUCT_XrEventDataSpaceEraseCompleteFB(_) \ + _(type) \ + _(next) \ + _(requestId) \ + _(result) \ + _(space) \ + _(uuid) \ + _(location) \ + +#define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \ + _(type) \ + _(next) \ + _(image) \ + _(width) \ + _(height) \ + +#define XR_LIST_STRUCT_XrSwapchainStateAndroidSurfaceDimensionsFB(_) \ + _(type) \ + _(next) \ + _(width) \ + _(height) \ + +#define XR_LIST_STRUCT_XrSwapchainStateSamplerOpenGLESFB(_) \ + _(type) \ + _(next) \ + _(minFilter) \ + _(magFilter) \ + _(wrapModeS) \ + _(wrapModeT) \ + _(swizzleRed) \ + _(swizzleGreen) \ + _(swizzleBlue) \ + _(swizzleAlpha) \ + _(maxAnisotropy) \ + _(borderColor) \ + +#define XR_LIST_STRUCT_XrSwapchainStateSamplerVulkanFB(_) \ + _(type) \ + _(next) \ + _(minFilter) \ + _(magFilter) \ + _(mipmapMode) \ + _(wrapModeS) \ + _(wrapModeT) \ + _(swizzleRed) \ + _(swizzleGreen) \ + _(swizzleBlue) \ + _(swizzleAlpha) \ + _(maxAnisotropy) \ + _(borderColor) \ + +#define XR_LIST_STRUCT_XrCompositionLayerSpaceWarpInfoFB(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + _(motionVectorSubImage) \ + _(appSpaceDeltaPose) \ + _(depthSubImage) \ + _(minDepth) \ + _(maxDepth) \ + _(nearZ) \ + _(farZ) \ + +#define XR_LIST_STRUCT_XrSystemSpaceWarpPropertiesFB(_) \ + _(type) \ + _(next) \ + _(recommendedMotionVectorImageRectWidth) \ + _(recommendedMotionVectorImageRectHeight) \ + +#define XR_LIST_STRUCT_XrExtent3DfFB(_) \ + _(width) \ + _(height) \ + _(depth) \ + +#define XR_LIST_STRUCT_XrOffset3DfFB(_) \ + _(x) \ + _(y) \ + _(z) \ + +#define XR_LIST_STRUCT_XrRect3DfFB(_) \ + _(offset) \ + _(extent) \ + +#define XR_LIST_STRUCT_XrSemanticLabelsFB(_) \ + _(type) \ + _(next) \ + _(bufferCapacityInput) \ + _(bufferCountOutput) \ + _(buffer) \ + +#define XR_LIST_STRUCT_XrRoomLayoutFB(_) \ + _(type) \ + _(next) \ + _(floorUuid) \ + _(ceilingUuid) \ + _(wallUuidCapacityInput) \ + _(wallUuidCountOutput) \ + _(wallUuids) \ + +#define XR_LIST_STRUCT_XrBoundary2DFB(_) \ + _(type) \ + _(next) \ + _(vertexCapacityInput) \ + _(vertexCountOutput) \ + _(vertices) \ + +#define XR_LIST_STRUCT_XrDigitalLensControlALMALENCE(_) \ + _(type) \ + _(next) \ + _(flags) \ + +#define XR_LIST_STRUCT_XrSpaceContainerFB(_) \ + _(type) \ + _(next) \ + _(uuidCapacityInput) \ + _(uuidCountOutput) \ + _(uuids) \ + +#define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \ + _(type) \ + _(next) \ + _(leftHandIntensity) \ + _(rightHandIntensity) \ + +#define XR_LIST_STRUCT_XrCompositionLayerSettingsFB(_) \ + _(type) \ + _(next) \ + _(layerFlags) \ + +#define XR_LIST_STRUCT_XrVulkanSwapchainCreateInfoMETA(_) \ + _(type) \ + _(next) \ + _(additionalCreateFlags) \ + _(additionalUsageFlags) \ + +#define XR_LIST_STRUCT_XrPerformanceMetricsStateMETA(_) \ + _(type) \ + _(next) \ + _(enabled) \ + +#define XR_LIST_STRUCT_XrPerformanceMetricsCounterMETA(_) \ + _(type) \ + _(next) \ + _(counterFlags) \ + _(counterUnit) \ + _(uintValue) \ + _(floatValue) \ + #define XR_LIST_STRUCTURE_TYPES_CORE(_) \ @@ -1502,8 +2747,13 @@ XR_ENUM_STR(XrResult); _(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \ _(XrSpatialAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) \ _(XrSpatialAnchorSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) \ + _(XrCompositionLayerImageLayoutFB, XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) \ + _(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \ _(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \ _(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \ + _(XrSpatialGraphStaticNodeBindingCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) \ + _(XrSpatialGraphNodeBindingPropertiesMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) \ _(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \ _(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \ _(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \ @@ -1526,9 +2776,106 @@ XR_ENUM_STR(XrResult); _(XrControllerModelNodeStateMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) \ _(XrControllerModelStateMSFT, XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) \ _(XrViewConfigurationViewFovEPIC, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) \ + _(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \ + _(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \ + _(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \ + _(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \ _(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \ + _(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \ + _(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \ + _(XrSceneCreateInfoMSFT, XR_TYPE_SCENE_CREATE_INFO_MSFT) \ + _(XrNewSceneComputeInfoMSFT, XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) \ + _(XrVisualMeshComputeLodInfoMSFT, XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) \ + _(XrSceneComponentsMSFT, XR_TYPE_SCENE_COMPONENTS_MSFT) \ + _(XrSceneComponentsGetInfoMSFT, XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) \ + _(XrSceneComponentLocationsMSFT, XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) \ + _(XrSceneComponentsLocateInfoMSFT, XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) \ + _(XrSceneObjectsMSFT, XR_TYPE_SCENE_OBJECTS_MSFT) \ + _(XrSceneComponentParentFilterInfoMSFT, XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) \ + _(XrSceneObjectTypesFilterInfoMSFT, XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) \ + _(XrScenePlanesMSFT, XR_TYPE_SCENE_PLANES_MSFT) \ + _(XrScenePlaneAlignmentFilterInfoMSFT, XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) \ + _(XrSceneMeshesMSFT, XR_TYPE_SCENE_MESHES_MSFT) \ + _(XrSceneMeshBuffersGetInfoMSFT, XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) \ + _(XrSceneMeshBuffersMSFT, XR_TYPE_SCENE_MESH_BUFFERS_MSFT) \ + _(XrSceneMeshVertexBufferMSFT, XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) \ + _(XrSceneMeshIndicesUint32MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) \ + _(XrSceneMeshIndicesUint16MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) \ + _(XrSerializedSceneFragmentDataGetInfoMSFT, XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) \ + _(XrSceneDeserializeInfoMSFT, XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) \ _(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \ + _(XrViveTrackerPathsHTCX, XR_TYPE_VIVE_TRACKER_PATHS_HTCX) \ + _(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \ + _(XrSystemFacialTrackingPropertiesHTC, XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) \ + _(XrFacialExpressionsHTC, XR_TYPE_FACIAL_EXPRESSIONS_HTC) \ + _(XrFacialTrackerCreateInfoHTC, XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) \ _(XrSystemColorSpacePropertiesFB, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) \ + _(XrHandTrackingMeshFB, XR_TYPE_HAND_TRACKING_MESH_FB) \ + _(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \ + _(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \ + _(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \ + _(XrSystemSpatialEntityPropertiesFB, XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) \ + _(XrSpatialAnchorCreateInfoFB, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) \ + _(XrSpaceComponentStatusSetInfoFB, XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) \ + _(XrSpaceComponentStatusFB, XR_TYPE_SPACE_COMPONENT_STATUS_FB) \ + _(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \ + _(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \ + _(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \ + _(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \ + _(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \ + _(XrFoveationLevelProfileCreateInfoFB, XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) \ + _(XrSystemKeyboardTrackingPropertiesFB, XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) \ + _(XrKeyboardSpaceCreateInfoFB, XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) \ + _(XrKeyboardTrackingQueryFB, XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) \ + _(XrTriangleMeshCreateInfoFB, XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) \ + _(XrSystemPassthroughPropertiesFB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) \ + _(XrPassthroughCreateInfoFB, XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) \ + _(XrPassthroughLayerCreateInfoFB, XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) \ + _(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \ + _(XrGeometryInstanceCreateInfoFB, XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) \ + _(XrGeometryInstanceTransformFB, XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) \ + _(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \ + _(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \ + _(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \ + _(XrPassthroughBrightnessContrastSaturationFB, XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) \ + _(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \ + _(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \ + _(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \ + _(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \ + _(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \ + _(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \ + _(XrRenderModelCapabilitiesRequestFB, XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) \ + _(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \ + _(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \ + _(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \ + _(XrCompositionLayerDepthTestVARJO, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) \ + _(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \ + _(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \ + _(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \ + _(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \ + _(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \ + _(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \ + _(XrSpaceStorageLocationFilterInfoFB, XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) \ + _(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \ + _(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \ + _(XrSpaceQueryResultsFB, XR_TYPE_SPACE_QUERY_RESULTS_FB) \ + _(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \ + _(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \ + _(XrSpaceSaveInfoFB, XR_TYPE_SPACE_SAVE_INFO_FB) \ + _(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \ + _(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \ + _(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \ + _(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \ + _(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \ + _(XrSemanticLabelsFB, XR_TYPE_SEMANTIC_LABELS_FB) \ + _(XrRoomLayoutFB, XR_TYPE_ROOM_LAYOUT_FB) \ + _(XrBoundary2DFB, XR_TYPE_BOUNDARY_2D_FB) \ + _(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \ + _(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \ + _(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \ + _(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \ + _(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \ + _(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \ @@ -1605,12 +2952,22 @@ XR_ENUM_STR(XrResult); #define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ _(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \ _(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \ + _(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \ #else #define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) #endif +#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID) +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \ + _(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \ + + +#else +#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) +#endif + #if defined(XR_USE_GRAPHICS_API_VULKAN) #define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \ _(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \ @@ -1620,6 +2977,9 @@ XR_ENUM_STR(XrResult); _(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \ _(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \ _(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \ + _(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \ + _(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \ + _(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \ #else @@ -1631,21 +2991,13 @@ XR_ENUM_STR(XrResult); _(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \ _(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \ _(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \ + _(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \ #else #define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) #endif -#if defined(XR_USE_PLATFORM_ANDROID) && defined(XR_USE_GRAPHICS_API_OPENGL_ES) -#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ - _(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \ - - -#else -#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID_XR_USE_GRAPHICS_API_OPENGL_ES(_) -#endif - #if defined(XR_USE_PLATFORM_EGL) #define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \ _(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \ @@ -1674,9 +3026,9 @@ XR_ENUM_STR(XrResult); XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ + XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \ - XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID_XR_USE_GRAPHICS_API_OPENGL_ES(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \ @@ -1707,6 +3059,8 @@ XR_ENUM_STR(XrResult); _(XR_VARJO_quad_views, 38) \ _(XR_MSFT_unbounded_reference_space, 39) \ _(XR_MSFT_spatial_anchor, 40) \ + _(XR_FB_composition_layer_image_layout, 41) \ + _(XR_FB_composition_layer_alpha_blend, 42) \ _(XR_MND_headless, 43) \ _(XR_OCULUS_android_session_state_enable, 45) \ _(XR_EXT_view_configuration_depth_range, 47) \ @@ -1723,9 +3077,14 @@ XR_ENUM_STR(XrResult); _(XR_EXT_win32_appcontainer_compatible, 58) \ _(XR_EPIC_view_configuration_fov, 60) \ _(XR_MSFT_holographic_window_attachment, 64) \ + _(XR_MSFT_composition_layer_reprojection, 67) \ _(XR_HUAWEI_controller_interaction, 70) \ _(XR_FB_android_surface_swapchain_create, 71) \ + _(XR_FB_swapchain_update_state, 72) \ + _(XR_FB_composition_layer_secure_content, 73) \ + _(XR_EXT_dpad_binding, 79) \ _(XR_VALVE_analog_threshold, 80) \ + _(XR_EXT_hand_joints_motion_range, 81) \ _(XR_KHR_loader_init, 89) \ _(XR_KHR_loader_init_android, 90) \ _(XR_KHR_vulkan_enable2, 91) \ @@ -1733,10 +3092,52 @@ XR_ENUM_STR(XrResult); _(XR_EXT_samsung_odyssey_controller, 95) \ _(XR_EXT_hp_mixed_reality_controller, 96) \ _(XR_MND_swapchain_usage_input_attachment_bit, 97) \ + _(XR_MSFT_scene_understanding, 98) \ + _(XR_MSFT_scene_understanding_serialization, 99) \ _(XR_FB_display_refresh_rate, 102) \ _(XR_HTC_vive_cosmos_controller_interaction, 103) \ + _(XR_HTCX_vive_tracker_interaction, 104) \ + _(XR_HTC_facial_tracking, 105) \ + _(XR_HTC_vive_focus3_controller_interaction, 106) \ + _(XR_HTC_hand_interaction, 107) \ + _(XR_HTC_vive_wrist_tracker_interaction, 108) \ _(XR_FB_color_space, 109) \ + _(XR_FB_hand_tracking_mesh, 111) \ + _(XR_FB_hand_tracking_aim, 112) \ + _(XR_FB_hand_tracking_capsules, 113) \ + _(XR_FB_spatial_entity, 114) \ + _(XR_FB_foveation, 115) \ + _(XR_FB_foveation_configuration, 116) \ + _(XR_FB_keyboard_tracking, 117) \ + _(XR_FB_triangle_mesh, 118) \ + _(XR_FB_passthrough, 119) \ + _(XR_FB_render_model, 120) \ _(XR_KHR_binding_modification, 121) \ + _(XR_VARJO_foveated_rendering, 122) \ + _(XR_VARJO_composition_layer_depth_test, 123) \ + _(XR_VARJO_environment_depth_estimation, 124) \ + _(XR_VARJO_marker_tracking, 125) \ + _(XR_VARJO_view_offset, 126) \ + _(XR_MSFT_spatial_anchor_persistence, 143) \ + _(XR_ULTRALEAP_hand_tracking_forearm, 150) \ + _(XR_FB_spatial_entity_query, 157) \ + _(XR_FB_spatial_entity_storage, 159) \ + _(XR_OCULUS_audio_device_guid, 160) \ + _(XR_FB_foveation_vulkan, 161) \ + _(XR_FB_swapchain_update_state_android_surface, 162) \ + _(XR_FB_swapchain_update_state_opengl_es, 163) \ + _(XR_FB_swapchain_update_state_vulkan, 164) \ + _(XR_KHR_swapchain_usage_input_attachment_bit, 166) \ + _(XR_FB_space_warp, 172) \ + _(XR_FB_scene, 176) \ + _(XR_EXT_palm_pose, 177) \ + _(XR_ALMALENCE_digital_lens_control, 197) \ + _(XR_FB_spatial_entity_container, 200) \ + _(XR_FB_passthrough_keyboard_hands, 204) \ + _(XR_FB_composition_layer_settings, 205) \ + _(XR_META_vulkan_swapchain_create_info, 228) \ + _(XR_META_performance_metrics, 233) \ + _(XR_EXT_uuid, 300) \ #endif diff --git a/libretro/libretro.cpp b/libretro/libretro.cpp index 49f92cc989..e0cb5c0e6e 100644 --- a/libretro/libretro.cpp +++ b/libretro/libretro.cpp @@ -597,6 +597,7 @@ static void check_variables(CoreParameter &coreParam) int iInternalResolution_prev; int iTexScalingType_prev; int iTexScalingLevel_prev; + int iMultiSampleLevel_prev; var.key = "ppsspp_language"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) @@ -745,6 +746,21 @@ static void check_variables(CoreParameter &coreParam) g_Config.iInternalResolution = 10; } + var.key = "ppsspp_mulitsample_level"; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) + { + iMultiSampleLevel_prev = g_Config.iMultiSampleLevel; + + if (!strcmp(var.value, "Disabled")) + g_Config.iMultiSampleLevel = 0; + else if (!strcmp(var.value, "x2")) + g_Config.iMultiSampleLevel = 1; + else if (!strcmp(var.value, "x4")) + g_Config.iMultiSampleLevel = 2; + else if (!strcmp(var.value, "x8")) + g_Config.iMultiSampleLevel = 3; + } + var.key = "ppsspp_skip_buffer_effects"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { @@ -1134,6 +1150,14 @@ static void check_variables(CoreParameter &coreParam) } } + if (g_Config.iMultiSampleLevel != iMultiSampleLevel_prev && PSP_IsInited()) + { + if (gpu) + { + gpu->NotifyRenderResized(); + } + } + if (updateAvInfo) { retro_system_av_info avInfo; diff --git a/libretro/libretro_core_options.h b/libretro/libretro_core_options.h index cc5f428268..ede76d29e2 100644 --- a/libretro/libretro_core_options.h +++ b/libretro/libretro_core_options.h @@ -283,6 +283,22 @@ struct retro_core_option_v2_definition option_defs_us[] = { }, "480x272" }, + { + "ppsspp_mulitsample_level", + "MSAA Antialiasing (Vulkan Only)", + NULL, + NULL, + NULL, + "video", + { + {"Disabled", NULL}, + {"x2", NULL}, + {"x4", NULL}, + {"x8", NULL}, + {NULL, NULL} + }, + "Disabled" + }, { "ppsspp_skip_buffer_effects", "Skip Buffer Effects", diff --git a/source_assets/image/arrow_down.png b/source_assets/image/arrow_down.png new file mode 100644 index 0000000000..d03afcc8d2 Binary files /dev/null and b/source_assets/image/arrow_down.png differ diff --git a/source_assets/image/arrow_left.png b/source_assets/image/arrow_left.png new file mode 100644 index 0000000000..37454034bd Binary files /dev/null and b/source_assets/image/arrow_left.png differ diff --git a/source_assets/image/arrow_right.png b/source_assets/image/arrow_right.png new file mode 100644 index 0000000000..5181723f98 Binary files /dev/null and b/source_assets/image/arrow_right.png differ diff --git a/source_assets/image/arrow_up.png b/source_assets/image/arrow_up.png new file mode 100644 index 0000000000..1e9fb9714d Binary files /dev/null and b/source_assets/image/arrow_up.png differ diff --git a/source_assets/image/buttons.svg b/source_assets/image/buttons.svg index d9ad2b43e5..68203e5e4c 100644 --- a/source_assets/image/buttons.svg +++ b/source_assets/image/buttons.svg @@ -2099,6 +2099,41 @@ operator="over" result="composite2" /> + + + + + + + + x="-2.726912" + y="-3.7985277" /> + inkscape:export-ydpi="135" + transform="translate(34.285714,-2.1428571)"> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source_assets/image/plus.png b/source_assets/image/plus.png new file mode 100644 index 0000000000..f65fb9c48c Binary files /dev/null and b/source_assets/image/plus.png differ diff --git a/source_assets/image/rotate_left.png b/source_assets/image/rotate_left.png new file mode 100644 index 0000000000..b7c9f40db9 Binary files /dev/null and b/source_assets/image/rotate_left.png differ diff --git a/source_assets/image/rotate_right.png b/source_assets/image/rotate_right.png new file mode 100644 index 0000000000..ddd4933fd6 Binary files /dev/null and b/source_assets/image/rotate_right.png differ diff --git a/source_assets/image/sliders.png b/source_assets/image/sliders.png new file mode 100644 index 0000000000..2ec872f0ff Binary files /dev/null and b/source_assets/image/sliders.png differ diff --git a/source_assets/image/three_dots.png b/source_assets/image/three_dots.png new file mode 100644 index 0000000000..9001c4fc17 Binary files /dev/null and b/source_assets/image/three_dots.png differ diff --git a/ui_atlasscript.txt b/ui_atlasscript.txt index 14d0cd2ac9..eead48f3f2 100644 --- a/ui_atlasscript.txt +++ b/ui_atlasscript.txt @@ -60,4 +60,13 @@ image I_SQUARE_SHAPE source_assets/image/square_shape.png copy image I_SQUARE_SHAPE_LINE source_assets/image/square_shape_line.png copy image I_FOLDER_OPEN source_assets/image/folder_open_line.png copy image I_WARNING source_assets/image/warning.png copy -image I_TRASHCAN source_assets/image/trashcan.png copy \ No newline at end of file +image I_TRASHCAN source_assets/image/trashcan.png copy +image I_PLUS source_assets/image/plus.png copy +image I_ROTATE_LEFT source_assets/image/rotate_left.png copy +image I_ROTATE_RIGHT source_assets/image/rotate_right.png copy +image I_ARROW_LEFT source_assets/image/arrow_left.png copy +image I_ARROW_RIGHT source_assets/image/arrow_right.png copy +image I_ARROW_UP source_assets/image/arrow_up.png copy +image I_ARROW_DOWN source_assets/image/arrow_down.png copy +image I_SLIDERS source_assets/image/sliders.png copy +image I_THREE_DOTS source_assets/image/three_dots.png copy diff --git a/unittest/TestSoftwareGPUJit.cpp b/unittest/TestSoftwareGPUJit.cpp index d0d08ba3a2..5d7c6946d4 100644 --- a/unittest/TestSoftwareGPUJit.cpp +++ b/unittest/TestSoftwareGPUJit.cpp @@ -18,6 +18,7 @@ #include "Common/Data/Random/Rng.h" #include "Common/StringUtils.h" #include "Core/Config.h" +#include "GPU/Software/BinManager.h" #include "GPU/Software/DrawPixel.h" #include "GPU/Software/Sampler.h" #include "GPU/Software/SoftGpu.h" @@ -25,21 +26,22 @@ static bool TestSamplerJit() { using namespace Sampler; SamplerJitCache *cache = new SamplerJitCache(); + BinManager binner; auto GetLinear = [&](SamplerID &id) { id.linear = true; id.fetch = false; - return cache->GetLinear(id, [] {}); + return cache->GetLinear(id, &binner); }; auto GetNearest = [&](SamplerID &id) { id.linear = false; id.fetch = false; - return cache->GetNearest(id, [] {}); + return cache->GetNearest(id, &binner); }; auto GetFetch = [&](SamplerID &id) { id.linear = false; id.fetch = true; - return cache->GetFetch(id, [] {}); + return cache->GetFetch(id, &binner); }; GMRng rng; @@ -111,6 +113,7 @@ static bool TestSamplerJit() { static bool TestPixelJit() { using namespace Rasterizer; PixelJitCache *cache = new PixelJitCache(); + BinManager binner; GMRng rng; int successes = 0; @@ -134,7 +137,7 @@ static bool TestPixelJit() { continue; i++; - SingleFunc func = cache->GetSingle(id, [] {}); + SingleFunc func = cache->GetSingle(id, &binner); SingleFunc genericFunc = cache->GenericSingle(id); if (func != genericFunc) { successes++;