added XXH3_64bits and calculate memory obj hashes
This commit is contained in:
parent
7570576aa2
commit
1a5dd6cdfe
|
@ -37,3 +37,7 @@
|
|||
path = third-party/vulkan
|
||||
url = https://github.com/shadps4/vulkan.git
|
||||
branch = main
|
||||
[submodule "third-party/xxHash"]
|
||||
path = third-party/xxHash
|
||||
url = https://github.com/Cyan4973/xxHash.git
|
||||
branch = dev
|
||||
|
|
|
@ -18,6 +18,7 @@ include_directories(third-party/magic_enum/include)
|
|||
include_directories(third-party/zydis/include/Zydis)
|
||||
include_directories(third-party/winpthread/include)
|
||||
include_directories(third-party/vulkan/include)
|
||||
include_directories(third-party/xxhash/include)
|
||||
add_subdirectory("third-party")
|
||||
#=================== EXAMPLE ===================
|
||||
include_directories(src)
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
#include "gpu_memory.h"
|
||||
|
||||
#include <xxhash/xxh3.h>
|
||||
|
||||
#include "Util/Singleton.h"
|
||||
|
||||
void* GPU::memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::GraphicCtx* ctx, void* todo /*CommandBuffer?*/, u64 virtual_addr, u64 size, const GPUObject& info) {
|
||||
void* GPU::memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::GraphicCtx* ctx, void* todo /*CommandBuffer?*/, u64 virtual_addr, u64 size,
|
||||
const GPUObject& info) {
|
||||
auto* gpumemory = Singleton<GPUMemory>::Instance();
|
||||
|
||||
return gpumemory->memoryCreateObj(submit_id, ctx, nullptr, &virtual_addr, &size, 1, info);
|
||||
|
@ -20,6 +23,8 @@ void GPU::memorySetAllocArea(u64 virtual_addr, u64 size) {
|
|||
gpumemory->m_heaps.push_back(h);
|
||||
}
|
||||
|
||||
u64 GPU::calculate_hash(const u08* buf, u64 size) { return (size > 0 && buf != nullptr ? XXH3_64bits(buf, size) : 0); }
|
||||
|
||||
int GPU::GPUMemory::getHeapId(u64 virtual_addr, u64 size) {
|
||||
int index = 0;
|
||||
for (const auto& heap : m_heaps) {
|
||||
|
@ -44,6 +49,21 @@ void* GPU::GPUMemory::memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::Graphi
|
|||
if (heap_id < 0) {
|
||||
return nullptr;
|
||||
}
|
||||
// TODO not finished!
|
||||
|
||||
ObjInfo obj = {};
|
||||
|
||||
// copy parameters from info to obj
|
||||
for (int i = 0; i < 8; i++) {
|
||||
obj.obj_params[i] = info.obj_params[i];
|
||||
}
|
||||
u64 hash[3] = {}; // assuming virtual_addr_num shouldn't be more that 3
|
||||
|
||||
for (int h = 0; h < virtual_addr_num; h++) {
|
||||
if (info.hasHash) {
|
||||
hash[h] = GPU::calculate_hash(reinterpret_cast<const u08*>(virtual_addr[h]), size[h]);
|
||||
} else {
|
||||
hash[h] = 0;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,9 @@ struct MemoryHeap {
|
|||
u64 allocated_size = 0;
|
||||
};
|
||||
|
||||
struct ObjInfo {
|
||||
u64 obj_params[8] = {};
|
||||
};
|
||||
class GPUMemory {
|
||||
public:
|
||||
GPUMemory() {}
|
||||
|
@ -30,10 +33,15 @@ class GPUObject {
|
|||
public:
|
||||
GPUObject() = default;
|
||||
virtual ~GPUObject() = default;
|
||||
u64 obj_params[8] = {};
|
||||
bool hasHash = false;
|
||||
bool isReadOnly = false;
|
||||
MemoryObjectType objectType = MemoryObjectType::InvalidObj;
|
||||
|
||||
};
|
||||
|
||||
void memorySetAllocArea(u64 virtual_addr, u64 size);
|
||||
void* memoryCreateObj(u64 submit_id, HLE::Libs::Graphics::GraphicCtx* ctx, /*CommandBuffer* buffer*/ void* todo, u64 virtual_addr, u64 size,
|
||||
const GPUObject& info);
|
||||
|
||||
u64 calculate_hash(const u08* buf, u64 size);
|
||||
} // namespace GPU
|
|
@ -1,6 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <types.h>
|
||||
|
||||
#include "gpu_memory.h"
|
||||
|
||||
namespace GPU {
|
||||
|
@ -13,7 +14,22 @@ enum class VideoOutBufferFormat : u64 {
|
|||
|
||||
class VideoOutBufferObj : public GPUObject {
|
||||
public:
|
||||
static constexpr int PIXEL_FORMAT_PARAM = 0;
|
||||
static constexpr int WIDTH_PARAM = 1;
|
||||
static constexpr int HEIGHT_PARAM = 2;
|
||||
static constexpr int IS_TILE_PARAM = 3;
|
||||
static constexpr int IS_NEO_PARAM = 4;
|
||||
static constexpr int PITCH_PARAM = 5;
|
||||
|
||||
explicit VideoOutBufferObj(VideoOutBufferFormat pixel_format, u32 width, u32 height, bool is_tiled, bool is_neo, u32 pitch) {
|
||||
obj_params[PIXEL_FORMAT_PARAM] = static_cast<uint64_t>(pixel_format);
|
||||
obj_params[WIDTH_PARAM] = width;
|
||||
obj_params[HEIGHT_PARAM] = height;
|
||||
obj_params[IS_TILE_PARAM] = is_tiled ? 1 : 0;
|
||||
obj_params[IS_NEO_PARAM] = is_neo ? 1 : 0;
|
||||
obj_params[PITCH_PARAM] = pitch;
|
||||
hasHash = true;
|
||||
objectType = GPU::MemoryObjectType::VideoOutBufferObj;
|
||||
}
|
||||
};
|
||||
}
|
||||
} // namespace GPU
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 058e54b10b10c658fd50862e6f65f55522afa182
|
Loading…
Reference in New Issue