Expose microcode data hash in Shader

Return paths to files that were dumped from Dump
This commit is contained in:
Dr. Chat 2016-02-05 15:59:07 -06:00
parent b696c645f5
commit ccb6a9146c
2 changed files with 10 additions and 5 deletions

View File

@ -16,9 +16,11 @@
#include "xenia/base/math.h" #include "xenia/base/math.h"
#include "xenia/base/memory.h" #include "xenia/base/memory.h"
#include "xenia/base/string.h" #include "xenia/base/string.h"
#include "xenia/gpu/ucode.h"
namespace xe { namespace xe {
namespace gpu { namespace gpu {
using namespace ucode;
Shader::Shader(ShaderType shader_type, uint64_t ucode_data_hash, Shader::Shader(ShaderType shader_type, uint64_t ucode_data_hash,
const uint32_t* ucode_dwords, size_t ucode_dword_count) const uint32_t* ucode_dwords, size_t ucode_dword_count)
@ -38,7 +40,8 @@ std::string Shader::GetTranslatedBinaryString() const {
return result; return result;
} }
void Shader::Dump(const std::string& base_path, const char* path_prefix) { std::pair<std::string, std::string> Shader::Dump(const std::string& base_path,
const char* path_prefix) {
// Ensure target path exists. // Ensure target path exists.
auto target_path = xe::to_wstring(base_path); auto target_path = xe::to_wstring(base_path);
if (!target_path.empty()) { if (!target_path.empty()) {
@ -79,6 +82,8 @@ void Shader::Dump(const std::string& base_path, const char* path_prefix) {
fwrite(ucode_data_.data(), 4, ucode_data_.size(), f); fwrite(ucode_data_.data(), 4, ucode_data_.size(), f);
fclose(f); fclose(f);
} }
return {std::string(txt_file_name), std::string(bin_file_name)};
} }
} // namespace gpu } // namespace gpu

View File

@ -502,6 +502,7 @@ class Shader {
// Microcode dwords in host endianness. // Microcode dwords in host endianness.
const std::vector<uint32_t>& ucode_data() const { return ucode_data_; } const std::vector<uint32_t>& ucode_data() const { return ucode_data_; }
uint64_t ucode_data_hash() const { return ucode_data_hash_; }
const uint32_t* ucode_dwords() const { return ucode_data_.data(); } const uint32_t* ucode_dwords() const { return ucode_data_.data(); }
size_t ucode_dword_count() const { return ucode_data_.size(); } size_t ucode_dword_count() const { return ucode_data_.size(); }
@ -547,13 +548,12 @@ class Shader {
// May be empty if the host does not support saving binaries. // May be empty if the host does not support saving binaries.
const std::vector<uint8_t>& host_binary() const { return host_binary_; } const std::vector<uint8_t>& host_binary() const { return host_binary_; }
// Prepares the shader for use in the host graphics API.
virtual bool Prepare() { return is_valid_; }
// Dumps the shader to a file in the given path based on ucode hash. // Dumps the shader to a file in the given path based on ucode hash.
// Both the ucode binary and disassembled and translated shader will be // Both the ucode binary and disassembled and translated shader will be
// written. // written.
void Dump(const std::string& base_path, const char* path_prefix); // Returns the filename of the shader and the binary.
std::pair<std::string, std::string> Dump(const std::string& base_path,
const char* path_prefix);
protected: protected:
friend class ShaderTranslator; friend class ShaderTranslator;