mirror of
https://github.com/PancakeTAS/lsfg-vk.git
synced 2025-10-30 07:01:10 +00:00
feat(fp16): passthrough fp16 to shader pool
This commit is contained in:
parent
b93a4eeaf2
commit
3fcde7c126
6 changed files with 15 additions and 10 deletions
|
|
@ -27,11 +27,14 @@ namespace LSFG::Pool {
|
|||
/// Create the shader pool.
|
||||
///
|
||||
/// @param source Function to retrieve shader source code by name.
|
||||
/// @param fp16 If true, use the FP16 variant of shaders.
|
||||
///
|
||||
/// @throws std::runtime_error if the shader pool cannot be created.
|
||||
///
|
||||
ShaderPool(const std::function<std::vector<uint8_t>(const std::string&)>& source)
|
||||
: source(source) {}
|
||||
ShaderPool(
|
||||
const std::function<std::vector<uint8_t>(const std::string&, bool)>& source,
|
||||
bool fp16)
|
||||
: source(source), fp16(fp16) {}
|
||||
|
||||
///
|
||||
/// Retrieve a shader module by name or create it.
|
||||
|
|
@ -57,7 +60,9 @@ namespace LSFG::Pool {
|
|||
Core::Pipeline getPipeline(
|
||||
const Core::Device& device, const std::string& name);
|
||||
private:
|
||||
std::function<std::vector<uint8_t>(const std::string&)> source;
|
||||
std::function<std::vector<uint8_t>(const std::string&, bool)> source;
|
||||
bool fp16{false};
|
||||
|
||||
std::unordered_map<std::string, Core::ShaderModule> shaders;
|
||||
std::unordered_map<std::string, Core::Pipeline> pipelines;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ namespace LSFG_3_1 {
|
|||
[[gnu::visibility("default")]]
|
||||
void initialize(uint64_t deviceUUID,
|
||||
bool isHdr, float flowScale, uint64_t generationCount,
|
||||
const std::function<std::vector<uint8_t>(const std::string&)>& loader);
|
||||
const std::function<std::vector<uint8_t>(const std::string&, bool)>& loader);
|
||||
|
||||
///
|
||||
/// Initialize the renderdoc API.
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ namespace LSFG_3_1P {
|
|||
[[gnu::visibility("default")]]
|
||||
void initialize(uint64_t deviceUUID,
|
||||
bool isHdr, float flowScale, uint64_t generationCount,
|
||||
const std::function<std::vector<uint8_t>(const std::string&)>& loader);
|
||||
const std::function<std::vector<uint8_t>(const std::string&, bool)>& loader);
|
||||
|
||||
///
|
||||
/// Initialize the renderdoc API.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ Core::ShaderModule ShaderPool::getShader(
|
|||
return it->second;
|
||||
|
||||
// grab the shader
|
||||
auto bytecode = this->source(name);
|
||||
auto bytecode = this->source(name, this->fp16);
|
||||
if (bytecode.empty())
|
||||
throw std::runtime_error("Shader code is empty: " + name);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace {
|
|||
|
||||
void LSFG_3_1::initialize(uint64_t deviceUUID,
|
||||
bool isHdr, float flowScale, uint64_t generationCount,
|
||||
const std::function<std::vector<uint8_t>(const std::string&)>& loader) {
|
||||
const std::function<std::vector<uint8_t>(const std::string&, bool)>& loader) {
|
||||
if (instance.has_value() || device.has_value())
|
||||
return;
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ void LSFG_3_1::initialize(uint64_t deviceUUID,
|
|||
device->descriptorPool = Core::DescriptorPool(device->device);
|
||||
|
||||
device->resources = Pool::ResourcePool(device->isHdr, device->flowScale);
|
||||
device->shaders = Pool::ShaderPool(loader);
|
||||
device->shaders = Pool::ShaderPool(loader, device->device.getFP16Support());
|
||||
|
||||
std::srand(static_cast<uint32_t>(std::time(nullptr)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ namespace {
|
|||
|
||||
void LSFG_3_1P::initialize(uint64_t deviceUUID,
|
||||
bool isHdr, float flowScale, uint64_t generationCount,
|
||||
const std::function<std::vector<uint8_t>(const std::string&)>& loader) {
|
||||
const std::function<std::vector<uint8_t>(const std::string&, bool)>& loader) {
|
||||
if (instance.has_value() || device.has_value())
|
||||
return;
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ void LSFG_3_1P::initialize(uint64_t deviceUUID,
|
|||
device->descriptorPool = Core::DescriptorPool(device->device);
|
||||
|
||||
device->resources = Pool::ResourcePool(device->isHdr, device->flowScale);
|
||||
device->shaders = Pool::ShaderPool(loader);
|
||||
device->shaders = Pool::ShaderPool(loader, device->device.getFP16Support());
|
||||
|
||||
std::srand(static_cast<uint32_t>(std::time(nullptr)));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue