From adf2a4a752f9d67cf5f0491f5e2a3b416603c5be Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Fri, 15 Jan 2021 07:59:17 +0100 Subject: [PATCH] early-access version 1318 --- README.md | 2 +- patches/inject-git-info.patch | 57 ++++++++++++++++++++++---------- src/video_core/textures/astc.cpp | 41 +++++++++++++---------- 3 files changed, 64 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 2abe01858..8a0cdd5e1 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 1317. +This is the source code for early-access 1318. ## Legal Notice diff --git a/patches/inject-git-info.patch b/patches/inject-git-info.patch index b5c4bffee..a3c7b5951 100644 --- a/patches/inject-git-info.patch +++ b/patches/inject-git-info.patch @@ -1,17 +1,40 @@ - - - - - - 503 Backend is unhealthy - - -

Error 503 Backend is unhealthy

-

Backend is unhealthy

-

Guru Mediation:

-

Details: cache-fra19153-FRA 1610670438 2624000569

-
-

Varnish cache server

- - +diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake +--- a/CMakeModules/GenerateSCMRev.cmake ++++ b/CMakeModules/GenerateSCMRev.cmake +@@ -11,10 +11,10 @@ + + # generate git/build information + include(GetGitRevisionDescription) +-get_git_head_revision(GIT_REF_SPEC GIT_REV) +-git_describe(GIT_DESC --always --long --dirty) +-git_branch_name(GIT_BRANCH) +-get_timestamp(BUILD_DATE) ++#get_git_head_revision(GIT_REF_SPEC GIT_REV) ++#git_describe(GIT_DESC --always --long --dirty) ++#git_branch_name(GIT_BRANCH) ++#get_timestamp(BUILD_DATE) + + # Generate cpp with Git revision from template + # Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well +@@ -113,4 +113,5 @@ + set(COMBINED "${COMBINED}${TMP}") + endforeach() + string(MD5 SHADER_CACHE_VERSION "${COMBINED}") ++set(BUILD_FULLNAME "${BUILD_FULLNAME} ") + configure_file("${SRC_DIR}/src/common/scm_rev.cpp.in" "scm_rev.cpp" @ONLY) +diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt +--- a/src/common/CMakeLists.txt ++++ b/src/common/CMakeLists.txt +@@ -28,6 +28,12 @@ + -DBUILD_TAG="${BUILD_TAG}" + -DBUILD_ID="${DISPLAY_VERSION}" + -DGIT_EXECUTABLE="${GIT_EXECUTABLE}" ++ -DGIT_REF_SPEC="${GIT_REF_SPEC}" ++ -DGIT_REV="${GIT_REV}" ++ -DGIT_DESC="${GIT_DESC}" ++ -DGIT_BRANCH="${GIT_BRANCH}" ++ -DBUILD_FULLNAME="${BUILD_FULLNAME}" ++ -DBUILD_DATE="${BUILD_DATE}" + -P "${CMAKE_SOURCE_DIR}/CMakeModules/GenerateSCMRev.cmake" + DEPENDS + # WARNING! It was too much work to try and make a common location for this list, diff --git a/src/video_core/textures/astc.cpp b/src/video_core/textures/astc.cpp index acd5bdd78..3625b666c 100755 --- a/src/video_core/textures/astc.cpp +++ b/src/video_core/textures/astc.cpp @@ -42,21 +42,24 @@ constexpr u32 Popcnt(u32 n) { class InputBitStream { public: - constexpr explicit InputBitStream(const u8* ptr, std::size_t start_offset = 0) - : cur_byte{ptr}, next_bit{start_offset % 8} {} + constexpr explicit InputBitStream(std::span data, size_t start_offset = 0) + : cur_byte{data.data()}, total_bits{data.size()}, next_bit{start_offset % 8} {} - constexpr std::size_t GetBitsRead() const { + constexpr size_t GetBitsRead() const { return bits_read; } constexpr bool ReadBit() { - const bool bit = (*cur_byte >> next_bit++) & 1; + if (bits_read >= total_bits * 8) { + return 0; + } + const bool bit = ((*cur_byte >> next_bit) & 1) != 0; + ++next_bit; while (next_bit >= 8) { next_bit -= 8; - cur_byte++; + ++cur_byte; } - - bits_read++; + ++bits_read; return bit; } @@ -79,8 +82,9 @@ public: private: const u8* cur_byte; - std::size_t next_bit = 0; - std::size_t bits_read = 0; + size_t total_bits = 0; + size_t next_bit = 0; + size_t bits_read = 0; }; class OutputBitStream { @@ -193,15 +197,15 @@ struct IntegerEncodedValue { }; }; using IntegerEncodedVector = boost::container::static_vector< - IntegerEncodedValue, 64, + IntegerEncodedValue, 256, boost::container::static_vector_options< boost::container::inplace_alignment, boost::container::throw_on_overflow>::type>; static void DecodeTritBlock(InputBitStream& bits, IntegerEncodedVector& result, u32 nBitsPerValue) { // Implement the algorithm in section C.2.12 - u32 m[5]; - u32 t[5]; + std::array m; + std::array t; u32 T; // Read the trit encoded block according to @@ -866,7 +870,7 @@ public: } }; -static void DecodeColorValues(u32* out, u8* data, const u32* modes, const u32 nPartitions, +static void DecodeColorValues(u32* out, std::span data, const u32* modes, const u32 nPartitions, const u32 nBitsForColorData) { // First figure out how many color values we have u32 nValues = 0; @@ -898,7 +902,7 @@ static void DecodeColorValues(u32* out, u8* data, const u32* modes, const u32 nP // We now have enough to decode our integer sequence. IntegerEncodedVector decodedColorValues; - InputBitStream colorStream(data); + InputBitStream colorStream(data, 0); DecodeIntegerSequence(decodedColorValues, colorStream, range, nValues); // Once we have the decoded values, we need to dequantize them to the 0-255 range @@ -1441,7 +1445,7 @@ static void ComputeEndpos32s(Pixel& ep1, Pixel& ep2, const u32*& colorValues, static void DecompressBlock(std::span inBuf, const u32 blockWidth, const u32 blockHeight, std::span outBuf) { - InputBitStream strm(inBuf.data()); + InputBitStream strm(inBuf); TexelWeightParams weightParams = DecodeBlockInfo(strm); // Was there an error? @@ -1619,15 +1623,16 @@ static void DecompressBlock(std::span inBuf, const u32 blockWidth, // Make sure that higher non-texel bits are set to zero const u32 clearByteStart = (weightParams.GetPackedBitSize() >> 3) + 1; - if (clearByteStart > 0) { + if (clearByteStart > 0 && clearByteStart <= texelWeightData.size()) { texelWeightData[clearByteStart - 1] &= static_cast((1 << (weightParams.GetPackedBitSize() % 8)) - 1); + std::memset(texelWeightData.data() + clearByteStart, 0, + std::min(16U - clearByteStart, 16U)); } - std::memset(texelWeightData.data() + clearByteStart, 0, std::min(16U - clearByteStart, 16U)); IntegerEncodedVector texelWeightValues; - InputBitStream weightStream(texelWeightData.data()); + InputBitStream weightStream(texelWeightData); DecodeIntegerSequence(texelWeightValues, weightStream, weightParams.m_MaxWeight, weightParams.GetNumWeightValues());