mirror of
https://github.com/Lime3DS/Lime3DS
synced 2025-01-09 13:43:27 +00:00
c8c2beaeff
* do not move constant variables
* applet_manager: avoid possible use after move
* use constant references where pointed out by msvc
* extra_hid: initialize response
* ValidateSaveState: passing slot separately is not necessary
* common: mark HashCombine as nodiscard
* cityhash: remove use of using namespace std
* Prefix all size_t with std::
done automatically by executing regex replace `([^:0-9a-zA-Z_])size_t([^0-9a-zA-Z_])` -> `$1std::size_t$2`
based on 7d8f115
* shared_memory.cpp: fix log error format
* fix compiling with pch off
63 lines
1.8 KiB
C++
63 lines
1.8 KiB
C++
// Copyright 2023 Citra Emulator Project
|
|
// Licensed under GPLv2 or any later version
|
|
// Refer to the license.txt file included.
|
|
|
|
#include "common/assert.h"
|
|
#include "common/bit_set.h"
|
|
#include "common/hash.h"
|
|
#include "common/logging/log.h"
|
|
#include "video_core/pica/regs_shader.h"
|
|
#include "video_core/pica/shader_setup.h"
|
|
|
|
namespace Pica {
|
|
|
|
ShaderSetup::ShaderSetup() = default;
|
|
|
|
ShaderSetup::~ShaderSetup() = default;
|
|
|
|
void ShaderSetup::WriteUniformBoolReg(u32 value) {
|
|
const auto bits = BitSet32(value);
|
|
for (u32 i = 0; i < uniforms.b.size(); ++i) {
|
|
uniforms.b[i] = bits[i];
|
|
}
|
|
}
|
|
|
|
void ShaderSetup::WriteUniformIntReg(u32 index, const Common::Vec4<u8> values) {
|
|
ASSERT(index < uniforms.i.size());
|
|
uniforms.i[index] = values;
|
|
}
|
|
|
|
void ShaderSetup::WriteUniformFloatReg(ShaderRegs& config, u32 value) {
|
|
auto& uniform_setup = config.uniform_setup;
|
|
const bool is_float32 = uniform_setup.IsFloat32();
|
|
if (!uniform_queue.Push(value, is_float32)) {
|
|
return;
|
|
}
|
|
|
|
const auto uniform = uniform_queue.Get(is_float32);
|
|
if (uniform_setup.index >= uniforms.f.size()) {
|
|
LOG_ERROR(HW_GPU, "Invalid float uniform index {}", uniform_setup.index.Value());
|
|
return;
|
|
}
|
|
|
|
uniforms.f[uniform_setup.index] = uniform;
|
|
uniform_setup.index.Assign(uniform_setup.index + 1);
|
|
}
|
|
|
|
u64 ShaderSetup::GetProgramCodeHash() {
|
|
if (program_code_hash_dirty) {
|
|
program_code_hash = Common::ComputeHash64(&program_code, sizeof(program_code));
|
|
program_code_hash_dirty = false;
|
|
}
|
|
return program_code_hash;
|
|
}
|
|
|
|
u64 ShaderSetup::GetSwizzleDataHash() {
|
|
if (swizzle_data_hash_dirty) {
|
|
swizzle_data_hash = Common::ComputeHash64(&swizzle_data, sizeof(swizzle_data));
|
|
swizzle_data_hash_dirty = false;
|
|
}
|
|
return swizzle_data_hash;
|
|
}
|
|
|
|
} // namespace Pica
|