diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/common/div_ceil.h | 10 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic_32.cpp | 9 | ||||
| -rw-r--r-- | src/core/file_sys/registered_cache.h | 8 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/buffer_queue.cpp | 6 | ||||
| -rw-r--r-- | src/tests/common/ring_buffer.cpp | 30 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/fixed_pipeline_state.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/fixed_pipeline_state.h | 11 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | 13 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_motion_touch.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/util/url_request_interceptor.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu_cmd/yuzu.cpp | 2 |
12 files changed, 50 insertions, 62 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8777df751..61adbef28 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt | |||
| @@ -45,10 +45,15 @@ if (MSVC) | |||
| 45 | 45 | ||
| 46 | # Warnings | 46 | # Warnings |
| 47 | /W3 | 47 | /W3 |
| 48 | /we4062 # enumerator 'identifier' in a switch of enum 'enumeration' is not handled | ||
| 49 | /we4101 # 'identifier': unreferenced local variable | ||
| 50 | /we4265 # 'class': class has virtual functions, but destructor is not virtual | ||
| 51 | /we4388 # signed/unsigned mismatch | ||
| 48 | /we4547 # 'operator' : operator before comma has no effect; expected operator with side-effect | 52 | /we4547 # 'operator' : operator before comma has no effect; expected operator with side-effect |
| 49 | /we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'? | 53 | /we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'? |
| 50 | /we4555 # Expression has no effect; expected expression with side-effect | 54 | /we4555 # Expression has no effect; expected expression with side-effect |
| 51 | /we4834 # Discarding return value of function with 'nodiscard' attribute | 55 | /we4834 # Discarding return value of function with 'nodiscard' attribute |
| 56 | /we5038 # data member 'member1' will be initialized after data member 'member2' | ||
| 52 | ) | 57 | ) |
| 53 | 58 | ||
| 54 | # /GS- - No stack buffer overflow checks | 59 | # /GS- - No stack buffer overflow checks |
diff --git a/src/common/div_ceil.h b/src/common/div_ceil.h index 6b2c48f91..95e1489a9 100644 --- a/src/common/div_ceil.h +++ b/src/common/div_ceil.h | |||
| @@ -11,16 +11,16 @@ namespace Common { | |||
| 11 | 11 | ||
| 12 | /// Ceiled integer division. | 12 | /// Ceiled integer division. |
| 13 | template <typename N, typename D> | 13 | template <typename N, typename D> |
| 14 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr auto DivCeil( | 14 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr N DivCeil(N number, |
| 15 | N number, D divisor) { | 15 | D divisor) { |
| 16 | return (static_cast<D>(number) + divisor - 1) / divisor; | 16 | return static_cast<N>((static_cast<D>(number) + divisor - 1) / divisor); |
| 17 | } | 17 | } |
| 18 | 18 | ||
| 19 | /// Ceiled integer division with logarithmic divisor in base 2 | 19 | /// Ceiled integer division with logarithmic divisor in base 2 |
| 20 | template <typename N, typename D> | 20 | template <typename N, typename D> |
| 21 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr auto DivCeilLog2( | 21 | requires std::is_integral_v<N>&& std::is_unsigned_v<D>[[nodiscard]] constexpr N DivCeilLog2( |
| 22 | N value, D alignment_log2) { | 22 | N value, D alignment_log2) { |
| 23 | return (static_cast<D>(value) + (D(1) << alignment_log2) - 1) >> alignment_log2; | 23 | return static_cast<N>((static_cast<D>(value) + (D(1) << alignment_log2) - 1) >> alignment_log2); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | } // namespace Common | 26 | } // namespace Common |
diff --git a/src/core/arm/dynarmic/arm_dynarmic_32.cpp b/src/core/arm/dynarmic/arm_dynarmic_32.cpp index 0831dd5d2..6c4c8e9e4 100644 --- a/src/core/arm/dynarmic/arm_dynarmic_32.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic_32.cpp | |||
| @@ -71,15 +71,8 @@ public: | |||
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override { | 73 | void ExceptionRaised(u32 pc, Dynarmic::A32::Exception exception) override { |
| 74 | switch (exception) { | ||
| 75 | case Dynarmic::A32::Exception::UndefinedInstruction: | ||
| 76 | case Dynarmic::A32::Exception::UnpredictableInstruction: | ||
| 77 | break; | ||
| 78 | case Dynarmic::A32::Exception::Breakpoint: | ||
| 79 | break; | ||
| 80 | } | ||
| 81 | LOG_CRITICAL(Core_ARM, "ExceptionRaised(exception = {}, pc = {:08X}, code = {:08X})", | 74 | LOG_CRITICAL(Core_ARM, "ExceptionRaised(exception = {}, pc = {:08X}, code = {:08X})", |
| 82 | static_cast<std::size_t>(exception), pc, MemoryReadCode(pc)); | 75 | exception, pc, MemoryReadCode(pc)); |
| 83 | UNIMPLEMENTED(); | 76 | UNIMPLEMENTED(); |
| 84 | } | 77 | } |
| 85 | 78 | ||
diff --git a/src/core/file_sys/registered_cache.h b/src/core/file_sys/registered_cache.h index 5b414b0f0..b08a1687a 100644 --- a/src/core/file_sys/registered_cache.h +++ b/src/core/file_sys/registered_cache.h | |||
| @@ -67,18 +67,18 @@ public: | |||
| 67 | virtual void Refresh() = 0; | 67 | virtual void Refresh() = 0; |
| 68 | 68 | ||
| 69 | virtual bool HasEntry(u64 title_id, ContentRecordType type) const = 0; | 69 | virtual bool HasEntry(u64 title_id, ContentRecordType type) const = 0; |
| 70 | virtual bool HasEntry(ContentProviderEntry entry) const; | 70 | bool HasEntry(ContentProviderEntry entry) const; |
| 71 | 71 | ||
| 72 | virtual std::optional<u32> GetEntryVersion(u64 title_id) const = 0; | 72 | virtual std::optional<u32> GetEntryVersion(u64 title_id) const = 0; |
| 73 | 73 | ||
| 74 | virtual VirtualFile GetEntryUnparsed(u64 title_id, ContentRecordType type) const = 0; | 74 | virtual VirtualFile GetEntryUnparsed(u64 title_id, ContentRecordType type) const = 0; |
| 75 | virtual VirtualFile GetEntryUnparsed(ContentProviderEntry entry) const; | 75 | VirtualFile GetEntryUnparsed(ContentProviderEntry entry) const; |
| 76 | 76 | ||
| 77 | virtual VirtualFile GetEntryRaw(u64 title_id, ContentRecordType type) const = 0; | 77 | virtual VirtualFile GetEntryRaw(u64 title_id, ContentRecordType type) const = 0; |
| 78 | virtual VirtualFile GetEntryRaw(ContentProviderEntry entry) const; | 78 | VirtualFile GetEntryRaw(ContentProviderEntry entry) const; |
| 79 | 79 | ||
| 80 | virtual std::unique_ptr<NCA> GetEntry(u64 title_id, ContentRecordType type) const = 0; | 80 | virtual std::unique_ptr<NCA> GetEntry(u64 title_id, ContentRecordType type) const = 0; |
| 81 | virtual std::unique_ptr<NCA> GetEntry(ContentProviderEntry entry) const; | 81 | std::unique_ptr<NCA> GetEntry(ContentProviderEntry entry) const; |
| 82 | 82 | ||
| 83 | virtual std::vector<ContentProviderEntry> ListEntries() const; | 83 | virtual std::vector<ContentProviderEntry> ListEntries() const; |
| 84 | 84 | ||
diff --git a/src/core/hle/service/nvflinger/buffer_queue.cpp b/src/core/hle/service/nvflinger/buffer_queue.cpp index c68905e19..5578181a4 100644 --- a/src/core/hle/service/nvflinger/buffer_queue.cpp +++ b/src/core/hle/service/nvflinger/buffer_queue.cpp | |||
| @@ -180,9 +180,11 @@ u32 BufferQueue::Query(QueryType type) { | |||
| 180 | switch (type) { | 180 | switch (type) { |
| 181 | case QueryType::NativeWindowFormat: | 181 | case QueryType::NativeWindowFormat: |
| 182 | return static_cast<u32>(PixelFormat::RGBA8888); | 182 | return static_cast<u32>(PixelFormat::RGBA8888); |
| 183 | case QueryType::NativeWindowWidth: | ||
| 184 | case QueryType::NativeWindowHeight: | ||
| 185 | break; | ||
| 183 | } | 186 | } |
| 184 | 187 | UNIMPLEMENTED_MSG("Unimplemented query type={}", type); | |
| 185 | UNIMPLEMENTED(); | ||
| 186 | return 0; | 188 | return 0; |
| 187 | } | 189 | } |
| 188 | 190 | ||
diff --git a/src/tests/common/ring_buffer.cpp b/src/tests/common/ring_buffer.cpp index c883c4d56..54def22da 100644 --- a/src/tests/common/ring_buffer.cpp +++ b/src/tests/common/ring_buffer.cpp | |||
| @@ -20,60 +20,60 @@ TEST_CASE("RingBuffer: Basic Tests", "[common]") { | |||
| 20 | for (std::size_t i = 0; i < 4; i++) { | 20 | for (std::size_t i = 0; i < 4; i++) { |
| 21 | const char elem = static_cast<char>(i); | 21 | const char elem = static_cast<char>(i); |
| 22 | const std::size_t count = buf.Push(&elem, 1); | 22 | const std::size_t count = buf.Push(&elem, 1); |
| 23 | REQUIRE(count == 1); | 23 | REQUIRE(count == 1U); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | REQUIRE(buf.Size() == 4); | 26 | REQUIRE(buf.Size() == 4U); |
| 27 | 27 | ||
| 28 | // Pushing values into a full ring buffer should fail. | 28 | // Pushing values into a full ring buffer should fail. |
| 29 | { | 29 | { |
| 30 | const char elem = static_cast<char>(42); | 30 | const char elem = static_cast<char>(42); |
| 31 | const std::size_t count = buf.Push(&elem, 1); | 31 | const std::size_t count = buf.Push(&elem, 1); |
| 32 | REQUIRE(count == 0); | 32 | REQUIRE(count == 0U); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | REQUIRE(buf.Size() == 4); | 35 | REQUIRE(buf.Size() == 4U); |
| 36 | 36 | ||
| 37 | // Popping multiple values from a ring buffer with values should succeed. | 37 | // Popping multiple values from a ring buffer with values should succeed. |
| 38 | { | 38 | { |
| 39 | const std::vector<char> popped = buf.Pop(2); | 39 | const std::vector<char> popped = buf.Pop(2); |
| 40 | REQUIRE(popped.size() == 2); | 40 | REQUIRE(popped.size() == 2U); |
| 41 | REQUIRE(popped[0] == 0); | 41 | REQUIRE(popped[0] == 0); |
| 42 | REQUIRE(popped[1] == 1); | 42 | REQUIRE(popped[1] == 1); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | REQUIRE(buf.Size() == 2); | 45 | REQUIRE(buf.Size() == 2U); |
| 46 | 46 | ||
| 47 | // Popping a single value from a ring buffer with values should succeed. | 47 | // Popping a single value from a ring buffer with values should succeed. |
| 48 | { | 48 | { |
| 49 | const std::vector<char> popped = buf.Pop(1); | 49 | const std::vector<char> popped = buf.Pop(1); |
| 50 | REQUIRE(popped.size() == 1); | 50 | REQUIRE(popped.size() == 1U); |
| 51 | REQUIRE(popped[0] == 2); | 51 | REQUIRE(popped[0] == 2); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | REQUIRE(buf.Size() == 1); | 54 | REQUIRE(buf.Size() == 1U); |
| 55 | 55 | ||
| 56 | // Pushing more values than space available should partially suceed. | 56 | // Pushing more values than space available should partially suceed. |
| 57 | { | 57 | { |
| 58 | std::vector<char> to_push(6); | 58 | std::vector<char> to_push(6); |
| 59 | std::iota(to_push.begin(), to_push.end(), 88); | 59 | std::iota(to_push.begin(), to_push.end(), 88); |
| 60 | const std::size_t count = buf.Push(to_push); | 60 | const std::size_t count = buf.Push(to_push); |
| 61 | REQUIRE(count == 3); | 61 | REQUIRE(count == 3U); |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | REQUIRE(buf.Size() == 4); | 64 | REQUIRE(buf.Size() == 4U); |
| 65 | 65 | ||
| 66 | // Doing an unlimited pop should pop all values. | 66 | // Doing an unlimited pop should pop all values. |
| 67 | { | 67 | { |
| 68 | const std::vector<char> popped = buf.Pop(); | 68 | const std::vector<char> popped = buf.Pop(); |
| 69 | REQUIRE(popped.size() == 4); | 69 | REQUIRE(popped.size() == 4U); |
| 70 | REQUIRE(popped[0] == 3); | 70 | REQUIRE(popped[0] == 3); |
| 71 | REQUIRE(popped[1] == 88); | 71 | REQUIRE(popped[1] == 88); |
| 72 | REQUIRE(popped[2] == 89); | 72 | REQUIRE(popped[2] == 89); |
| 73 | REQUIRE(popped[3] == 90); | 73 | REQUIRE(popped[3] == 90); |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | REQUIRE(buf.Size() == 0); | 76 | REQUIRE(buf.Size() == 0U); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | TEST_CASE("RingBuffer: Threaded Test", "[common]") { | 79 | TEST_CASE("RingBuffer: Threaded Test", "[common]") { |
| @@ -93,7 +93,7 @@ TEST_CASE("RingBuffer: Threaded Test", "[common]") { | |||
| 93 | std::size_t i = 0; | 93 | std::size_t i = 0; |
| 94 | while (i < count) { | 94 | while (i < count) { |
| 95 | if (const std::size_t c = buf.Push(&value[0], 1); c > 0) { | 95 | if (const std::size_t c = buf.Push(&value[0], 1); c > 0) { |
| 96 | REQUIRE(c == 1); | 96 | REQUIRE(c == 1U); |
| 97 | i++; | 97 | i++; |
| 98 | next_value(value); | 98 | next_value(value); |
| 99 | } else { | 99 | } else { |
| @@ -108,7 +108,7 @@ TEST_CASE("RingBuffer: Threaded Test", "[common]") { | |||
| 108 | std::size_t i = 0; | 108 | std::size_t i = 0; |
| 109 | while (i < count) { | 109 | while (i < count) { |
| 110 | if (const std::vector<char> v = buf.Pop(1); v.size() > 0) { | 110 | if (const std::vector<char> v = buf.Pop(1); v.size() > 0) { |
| 111 | REQUIRE(v.size() == 2); | 111 | REQUIRE(v.size() == 2U); |
| 112 | REQUIRE(v[0] == value[0]); | 112 | REQUIRE(v[0] == value[0]); |
| 113 | REQUIRE(v[1] == value[1]); | 113 | REQUIRE(v[1] == value[1]); |
| 114 | i++; | 114 | i++; |
| @@ -123,7 +123,7 @@ TEST_CASE("RingBuffer: Threaded Test", "[common]") { | |||
| 123 | producer.join(); | 123 | producer.join(); |
| 124 | consumer.join(); | 124 | consumer.join(); |
| 125 | 125 | ||
| 126 | REQUIRE(buf.Size() == 0); | 126 | REQUIRE(buf.Size() == 0U); |
| 127 | printf("RingBuffer: Threaded Test: full: %zu, empty: %zu\n", full, empty); | 127 | printf("RingBuffer: Threaded Test: full: %zu, empty: %zu\n", full, empty); |
| 128 | } | 128 | } |
| 129 | 129 | ||
diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp index 67dd10500..5be6dabd9 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp | |||
| @@ -76,7 +76,7 @@ void FixedPipelineState::Fill(const Maxwell& regs, bool has_extended_dynamic_sta | |||
| 76 | regs.instanced_arrays.IsInstancingEnabled(index) ? regs.vertex_array[index].divisor : 0; | 76 | regs.instanced_arrays.IsInstancingEnabled(index) ? regs.vertex_array[index].divisor : 0; |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | for (std::size_t index = 0; index < Maxwell::NumVertexAttributes; ++index) { | 79 | for (size_t index = 0; index < Maxwell::NumVertexAttributes; ++index) { |
| 80 | const auto& input = regs.vertex_attrib_format[index]; | 80 | const auto& input = regs.vertex_attrib_format[index]; |
| 81 | auto& attribute = attributes[index]; | 81 | auto& attribute = attributes[index]; |
| 82 | attribute.raw = 0; | 82 | attribute.raw = 0; |
| @@ -85,6 +85,7 @@ void FixedPipelineState::Fill(const Maxwell& regs, bool has_extended_dynamic_sta | |||
| 85 | attribute.offset.Assign(input.offset); | 85 | attribute.offset.Assign(input.offset); |
| 86 | attribute.type.Assign(static_cast<u32>(input.type.Value())); | 86 | attribute.type.Assign(static_cast<u32>(input.type.Value())); |
| 87 | attribute.size.Assign(static_cast<u32>(input.size.Value())); | 87 | attribute.size.Assign(static_cast<u32>(input.size.Value())); |
| 88 | attribute.binding_index_enabled.Assign(regs.vertex_array[index].IsEnabled() ? 1 : 0); | ||
| 88 | } | 89 | } |
| 89 | 90 | ||
| 90 | for (std::size_t index = 0; index < std::size(attachments); ++index) { | 91 | for (std::size_t index = 0; index < std::size(attachments); ++index) { |
| @@ -172,14 +173,9 @@ void FixedPipelineState::DynamicState::Fill(const Maxwell& regs) { | |||
| 172 | depth_test_func.Assign(PackComparisonOp(regs.depth_test_func)); | 173 | depth_test_func.Assign(PackComparisonOp(regs.depth_test_func)); |
| 173 | cull_face.Assign(PackCullFace(regs.cull_face)); | 174 | cull_face.Assign(PackCullFace(regs.cull_face)); |
| 174 | cull_enable.Assign(regs.cull_test_enabled != 0 ? 1 : 0); | 175 | cull_enable.Assign(regs.cull_test_enabled != 0 ? 1 : 0); |
| 175 | 176 | std::ranges::transform(regs.vertex_array, vertex_strides.begin(), [](const auto& array) { | |
| 176 | for (std::size_t index = 0; index < Maxwell::NumVertexArrays; ++index) { | 177 | return static_cast<u16>(array.stride.Value()); |
| 177 | const auto& input = regs.vertex_array[index]; | 178 | }); |
| 178 | VertexBinding& binding = vertex_bindings[index]; | ||
| 179 | binding.raw = 0; | ||
| 180 | binding.enabled.Assign(input.IsEnabled() ? 1 : 0); | ||
| 181 | binding.stride.Assign(static_cast<u16>(input.stride.Value())); | ||
| 182 | } | ||
| 183 | } | 179 | } |
| 184 | 180 | ||
| 185 | std::size_t FixedPipelineState::Hash() const noexcept { | 181 | std::size_t FixedPipelineState::Hash() const noexcept { |
diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.h b/src/video_core/renderer_vulkan/fixed_pipeline_state.h index 7e95e6fce..465a55fdb 100644 --- a/src/video_core/renderer_vulkan/fixed_pipeline_state.h +++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.h | |||
| @@ -96,6 +96,8 @@ struct FixedPipelineState { | |||
| 96 | BitField<6, 14, u32> offset; | 96 | BitField<6, 14, u32> offset; |
| 97 | BitField<20, 3, u32> type; | 97 | BitField<20, 3, u32> type; |
| 98 | BitField<23, 6, u32> size; | 98 | BitField<23, 6, u32> size; |
| 99 | // Not really an element of a vertex attribute, but it can be packed here | ||
| 100 | BitField<29, 1, u32> binding_index_enabled; | ||
| 99 | 101 | ||
| 100 | constexpr Maxwell::VertexAttribute::Type Type() const noexcept { | 102 | constexpr Maxwell::VertexAttribute::Type Type() const noexcept { |
| 101 | return static_cast<Maxwell::VertexAttribute::Type>(type.Value()); | 103 | return static_cast<Maxwell::VertexAttribute::Type>(type.Value()); |
| @@ -130,12 +132,6 @@ struct FixedPipelineState { | |||
| 130 | } | 132 | } |
| 131 | }; | 133 | }; |
| 132 | 134 | ||
| 133 | union VertexBinding { | ||
| 134 | u16 raw; | ||
| 135 | BitField<0, 12, u16> stride; | ||
| 136 | BitField<12, 1, u16> enabled; | ||
| 137 | }; | ||
| 138 | |||
| 139 | struct DynamicState { | 135 | struct DynamicState { |
| 140 | union { | 136 | union { |
| 141 | u32 raw1; | 137 | u32 raw1; |
| @@ -153,7 +149,8 @@ struct FixedPipelineState { | |||
| 153 | BitField<0, 2, u32> cull_face; | 149 | BitField<0, 2, u32> cull_face; |
| 154 | BitField<2, 1, u32> cull_enable; | 150 | BitField<2, 1, u32> cull_enable; |
| 155 | }; | 151 | }; |
| 156 | std::array<VertexBinding, Maxwell::NumVertexArrays> vertex_bindings; | 152 | // Vertex stride is a 12 bits value, we have 4 bits to spare per element |
| 153 | std::array<u16, Maxwell::NumVertexArrays> vertex_strides; | ||
| 157 | 154 | ||
| 158 | void Fill(const Maxwell& regs); | 155 | void Fill(const Maxwell& regs); |
| 159 | 156 | ||
diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 8a94464f6..a5214d0bc 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp | |||
| @@ -212,11 +212,7 @@ vk::Pipeline VKGraphicsPipeline::CreatePipeline(const SPIRVProgram& program, | |||
| 212 | // state is ignored | 212 | // state is ignored |
| 213 | dynamic.raw1 = 0; | 213 | dynamic.raw1 = 0; |
| 214 | dynamic.raw2 = 0; | 214 | dynamic.raw2 = 0; |
| 215 | for (FixedPipelineState::VertexBinding& binding : dynamic.vertex_bindings) { | 215 | dynamic.vertex_strides.fill(0); |
| 216 | // Enable all vertex bindings | ||
| 217 | binding.raw = 0; | ||
| 218 | binding.enabled.Assign(1); | ||
| 219 | } | ||
| 220 | } else { | 216 | } else { |
| 221 | dynamic = state.dynamic_state; | 217 | dynamic = state.dynamic_state; |
| 222 | } | 218 | } |
| @@ -224,19 +220,16 @@ vk::Pipeline VKGraphicsPipeline::CreatePipeline(const SPIRVProgram& program, | |||
| 224 | std::vector<VkVertexInputBindingDescription> vertex_bindings; | 220 | std::vector<VkVertexInputBindingDescription> vertex_bindings; |
| 225 | std::vector<VkVertexInputBindingDivisorDescriptionEXT> vertex_binding_divisors; | 221 | std::vector<VkVertexInputBindingDivisorDescriptionEXT> vertex_binding_divisors; |
| 226 | for (std::size_t index = 0; index < Maxwell::NumVertexArrays; ++index) { | 222 | for (std::size_t index = 0; index < Maxwell::NumVertexArrays; ++index) { |
| 227 | const auto& binding = dynamic.vertex_bindings[index]; | 223 | if (state.attributes[index].binding_index_enabled == 0) { |
| 228 | if (!binding.enabled) { | ||
| 229 | continue; | 224 | continue; |
| 230 | } | 225 | } |
| 231 | const bool instanced = state.binding_divisors[index] != 0; | 226 | const bool instanced = state.binding_divisors[index] != 0; |
| 232 | const auto rate = instanced ? VK_VERTEX_INPUT_RATE_INSTANCE : VK_VERTEX_INPUT_RATE_VERTEX; | 227 | const auto rate = instanced ? VK_VERTEX_INPUT_RATE_INSTANCE : VK_VERTEX_INPUT_RATE_VERTEX; |
| 233 | |||
| 234 | vertex_bindings.push_back({ | 228 | vertex_bindings.push_back({ |
| 235 | .binding = static_cast<u32>(index), | 229 | .binding = static_cast<u32>(index), |
| 236 | .stride = binding.stride, | 230 | .stride = dynamic.vertex_strides[index], |
| 237 | .inputRate = rate, | 231 | .inputRate = rate, |
| 238 | }); | 232 | }); |
| 239 | |||
| 240 | if (instanced) { | 233 | if (instanced) { |
| 241 | vertex_binding_divisors.push_back({ | 234 | vertex_binding_divisors.push_back({ |
| 242 | .binding = static_cast<u32>(index), | 235 | .binding = static_cast<u32>(index), |
diff --git a/src/yuzu/configuration/configure_motion_touch.cpp b/src/yuzu/configuration/configure_motion_touch.cpp index c2a7113da..eb8eacbf9 100644 --- a/src/yuzu/configuration/configure_motion_touch.cpp +++ b/src/yuzu/configuration/configure_motion_touch.cpp | |||
| @@ -51,6 +51,8 @@ CalibrationConfigurationDialog::CalibrationConfigurationDialog(QWidget* parent, | |||
| 51 | case CalibrationConfigurationJob::Status::Completed: | 51 | case CalibrationConfigurationJob::Status::Completed: |
| 52 | text = tr("Configuration completed!"); | 52 | text = tr("Configuration completed!"); |
| 53 | break; | 53 | break; |
| 54 | default: | ||
| 55 | break; | ||
| 54 | } | 56 | } |
| 55 | QMetaObject::invokeMethod(this, "UpdateLabelText", Q_ARG(QString, text)); | 57 | QMetaObject::invokeMethod(this, "UpdateLabelText", Q_ARG(QString, text)); |
| 56 | if (status == CalibrationConfigurationJob::Status::Completed) { | 58 | if (status == CalibrationConfigurationJob::Status::Completed) { |
diff --git a/src/yuzu/util/url_request_interceptor.cpp b/src/yuzu/util/url_request_interceptor.cpp index 2d491d8c0..b637e771e 100644 --- a/src/yuzu/util/url_request_interceptor.cpp +++ b/src/yuzu/util/url_request_interceptor.cpp | |||
| @@ -22,6 +22,8 @@ void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo& info) { | |||
| 22 | case QWebEngineUrlRequestInfo::ResourceTypeXhr: | 22 | case QWebEngineUrlRequestInfo::ResourceTypeXhr: |
| 23 | emit FrameChanged(); | 23 | emit FrameChanged(); |
| 24 | break; | 24 | break; |
| 25 | default: | ||
| 26 | break; | ||
| 25 | } | 27 | } |
| 26 | } | 28 | } |
| 27 | 29 | ||
diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp index 39e0d35aa..4faf62ede 100644 --- a/src/yuzu_cmd/yuzu.cpp +++ b/src/yuzu_cmd/yuzu.cpp | |||
| @@ -95,8 +95,6 @@ int main(int argc, char** argv) { | |||
| 95 | int option_index = 0; | 95 | int option_index = 0; |
| 96 | 96 | ||
| 97 | InitializeLogging(); | 97 | InitializeLogging(); |
| 98 | |||
| 99 | char* endarg; | ||
| 100 | #ifdef _WIN32 | 98 | #ifdef _WIN32 |
| 101 | int argc_w; | 99 | int argc_w; |
| 102 | auto argv_w = CommandLineToArgvW(GetCommandLineW(), &argc_w); | 100 | auto argv_w = CommandLineToArgvW(GetCommandLineW(), &argc_w); |