summaryrefslogtreecommitdiffstats
path: root/src/video_core/shader/shader_jit_x64.cpp
diff options
context:
space:
mode:
authorYuri Kunde Schlesner <yuriks@yuriks.net>2016-12-17 10:21:16 +0100
committerYuri Kunde Schlesner <yuriks@yuriks.net>2017-01-26 03:53:24 +0100
commit114d6b2f97eb62c7d8c958ebb391b70b026130f9 (patch)
tree8600239b8ee804b78bc2c60fb6285a2e8cf2c4fa /src/video_core/shader/shader_jit_x64.cpp
parentVideoCore/Shader: Rename shader_jit_x64{ => _compiler}.{cpp,h} (diff)
downloadyuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar.gz
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar.bz2
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar.lz
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar.xz
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.tar.zst
yuzu-114d6b2f97eb62c7d8c958ebb391b70b026130f9.zip
Diffstat (limited to 'src/video_core/shader/shader_jit_x64.cpp')
-rw-r--r--src/video_core/shader/shader_jit_x64.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/video_core/shader/shader_jit_x64.cpp b/src/video_core/shader/shader_jit_x64.cpp
new file mode 100644
index 000000000..fea79538a
--- /dev/null
+++ b/src/video_core/shader/shader_jit_x64.cpp
@@ -0,0 +1,56 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "common/hash.h"
+#include "common/microprofile.h"
+#include "video_core/shader/shader.h"
+#include "video_core/shader/shader_jit_x64.h"
+#include "video_core/shader/shader_jit_x64_compiler.h"
+
+namespace Pica {
+namespace Shader {
+
+JitX64Engine::JitX64Engine() = default;
+JitX64Engine::~JitX64Engine() = default;
+
+void JitX64Engine::SetupBatch(const ShaderSetup* setup_) {
+ cached_shader = nullptr;
+ setup = setup_;
+ if (setup == nullptr)
+ return;
+
+ u64 code_hash = Common::ComputeHash64(&setup->program_code, sizeof(setup->program_code));
+ u64 swizzle_hash = Common::ComputeHash64(&setup->swizzle_data, sizeof(setup->swizzle_data));
+
+ u64 cache_key = code_hash ^ swizzle_hash;
+ auto iter = cache.find(cache_key);
+ if (iter != cache.end()) {
+ cached_shader = iter->second.get();
+ } else {
+ auto shader = std::make_unique<JitShader>();
+ shader->Compile();
+ cached_shader = shader.get();
+ cache.emplace_hint(iter, cache_key, std::move(shader));
+ }
+}
+
+MICROPROFILE_DECLARE(GPU_Shader);
+
+void JitX64Engine::Run(UnitState& state, unsigned int entry_point) const {
+ ASSERT(setup != nullptr);
+ ASSERT(cached_shader != nullptr);
+ ASSERT(entry_point < 1024);
+
+ MICROPROFILE_SCOPE(GPU_Shader);
+
+ cached_shader->Run(*setup, state, entry_point);
+}
+
+DebugData<true> JitX64Engine::ProduceDebugInfo(const InputVertex& input, int num_attributes,
+ unsigned int entry_point) const {
+ UNIMPLEMENTED_MSG("Shader tracing/debugging is not supported by the JIT.");
+}
+
+} // namespace Shader
+} // namespace Pica