VideoCommon: add custom includer to custom shaders, this will allow us to ship built-in custom shaders in the future

This commit is contained in:
iwubcode 2025-11-02 15:12:02 -06:00
parent 93a6cc80b4
commit 23c637c029
2 changed files with 18 additions and 0 deletions

View File

@ -8,6 +8,7 @@
#include <fmt/std.h>
#include "Common/CommonPaths.h"
#include "Common/FileUtil.h"
#include "Common/IOFile.h"
#include "Common/JsonUtil.h"
@ -150,6 +151,12 @@ DirectFilesystemAssetLibrary::LoadRasterSurfaceShader(const AssetID& asset_id,
if (!RasterSurfaceShaderData::FromJson(asset_id, root_obj, data))
return {};
const std::string graphics_mod_builtin =
File::GetSysDirectory() + GRAPHICSMOD_DIR + "/Builtin" + "/Shaders";
data->shader_includer = std::make_unique<VideoCommon::ShaderIncluder>(
PathToString(pixel_shader->second.parent_path()), graphics_mod_builtin);
return LoadInfo{approx_mem_size};
}

View File

@ -4,6 +4,7 @@
#pragma once
#include <array>
#include <memory>
#include <span>
#include <string>
#include <string_view>
@ -13,6 +14,7 @@
#include <picojson.h>
#include "VideoCommon/Assets/CustomAsset.h"
#include "VideoCommon/ShaderCompileUtils.h"
#include "VideoCommon/TextureConfig.h"
class ShaderCode;
@ -45,6 +47,13 @@ struct ShaderProperty
struct RasterSurfaceShaderData
{
RasterSurfaceShaderData() = default;
RasterSurfaceShaderData(const RasterSurfaceShaderData&) = delete;
RasterSurfaceShaderData(RasterSurfaceShaderData&&) = default;
~RasterSurfaceShaderData() = default;
RasterSurfaceShaderData& operator=(const RasterSurfaceShaderData&) = delete;
RasterSurfaceShaderData& operator=(RasterSurfaceShaderData&&) = default;
static bool FromJson(const CustomAssetLibrary::AssetID& asset_id, const picojson::object& json,
RasterSurfaceShaderData* data);
static void ToJson(picojson::object& obj, const RasterSurfaceShaderData& data);
@ -65,6 +74,8 @@ struct RasterSurfaceShaderData
bool operator==(const SamplerData&) const = default;
};
std::vector<SamplerData> samplers;
std::unique_ptr<VideoCommon::ShaderIncluder> shader_includer;
};
class RasterSurfaceShaderAsset final : public CustomLoadableAsset<RasterSurfaceShaderData>