PostProcessing/FX: Don't try to compile for GL<3.2

No interface blocks or binding layouts. Get a better driver for gosh
sake.
This commit is contained in:
Stenzek 2025-07-09 21:17:23 +10:00
parent 80a689257c
commit b9a9ea220e
No known key found for this signature in database

View File

@ -60,7 +60,8 @@ static bool PreprocessorReadFileCallback(const std::string& path, std::string& d
return true;
}
static std::tuple<std::unique_ptr<reshadefx::codegen>, GPUShaderLanguage> CreateRFXCodegen(bool only_config)
static std::tuple<std::unique_ptr<reshadefx::codegen>, GPUShaderLanguage> CreateRFXCodegen(bool only_config,
Error* error)
{
constexpr bool uniforms_to_spec_constants = false;
@ -114,6 +115,15 @@ static std::tuple<std::unique_ptr<reshadefx::codegen>, GPUShaderLanguage> Create
case RenderAPI::OpenGLES:
default:
{
// Binding layout is required for reshade.
if (g_gpu_device && (!ShaderGen::UseGLSLInterfaceBlocks() || !ShaderGen::UseGLSLBindingLayout()))
{
Error::SetStringView(
error,
"ReShade post-processing requires an OpenGL driver that supports interface blocks and binding layout.");
return {};
}
return std::make_tuple(std::unique_ptr<reshadefx::codegen>(reshadefx::create_codegen_glsl(
g_gpu_device ? ShaderGen::GetGLSLVersion(rapi) : 460, (rapi == RenderAPI::OpenGLES),
false, debug_info, uniforms_to_spec_constants, false, true)),
@ -334,11 +344,10 @@ bool PostProcessing::ReShadeFXShader::LoadFromString(std::string name, std::stri
code.push_back('\n');
// TODO: This could use spv, it's probably fastest.
const auto& [cg, cg_language] = CreateRFXCodegen(only_config);
if (!CreateModule(only_config ? DEFAULT_BUFFER_WIDTH : g_gpu_device->GetMainSwapChain()->GetWidth(),
only_config ? DEFAULT_BUFFER_HEIGHT : g_gpu_device->GetMainSwapChain()->GetHeight(), cg.get(),
cg_language, std::move(code), error))
const auto& [cg, cg_language] = CreateRFXCodegen(only_config, error);
if (!cg || !CreateModule(only_config ? DEFAULT_BUFFER_WIDTH : g_gpu_device->GetMainSwapChain()->GetWidth(),
only_config ? DEFAULT_BUFFER_HEIGHT : g_gpu_device->GetMainSwapChain()->GetHeight(),
cg.get(), cg_language, std::move(code), error))
{
return false;
}
@ -1449,7 +1458,9 @@ bool PostProcessing::ReShadeFXShader::CompilePipeline(GPUTexture::Format format,
if (fxcode.empty() || fxcode.back() != '\n')
fxcode.push_back('\n');
const auto& [cg, cg_language] = CreateRFXCodegen(false);
const auto& [cg, cg_language] = CreateRFXCodegen(false, error);
if (!cg)
return false;
if (!CreateModule(width, height, cg.get(), cg_language, std::move(fxcode), error))
{