summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2021-06-15 05:33:26 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:38 +0200
commit3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd (patch)
tree76ca69181eeb90c2fd2adf8defc68ddc7d8b135e /src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp
parentglsl: Cleanup/Address feedback (diff)
downloadyuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar.gz
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar.bz2
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar.lz
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar.xz
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.tar.zst
yuzu-3b339fbbf65a50ec2ec8baacd175ca7577c3b8bd.zip
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp
index 4d418cbbc..a982dd8a2 100644
--- a/src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp
+++ b/src/shader_recompiler/backend/glsl/emit_glsl_warp.cpp
@@ -180,18 +180,38 @@ void EmitFSwizzleAdd(EmitContext& ctx, IR::Inst& inst, std::string_view op_a, st
}
void EmitDPdxFine(EmitContext& ctx, IR::Inst& inst, std::string_view op_a) {
- ctx.AddF32("{}=dFdxFine({});", inst, op_a);
+ if (ctx.profile.support_gl_derivative_control) {
+ ctx.AddF32("{}=dFdxFine({});", inst, op_a);
+ } else {
+ LOG_WARNING(Shader_GLSL, "Device does not support dFdxFine, fallback to dFdx");
+ ctx.AddF32("{}=dFdx({});", inst, op_a);
+ }
}
void EmitDPdyFine(EmitContext& ctx, IR::Inst& inst, std::string_view op_a) {
- ctx.AddF32("{}=dFdyFine({});", inst, op_a);
+ if (ctx.profile.support_gl_derivative_control) {
+ ctx.AddF32("{}=dFdyFine({});", inst, op_a);
+ } else {
+ LOG_WARNING(Shader_GLSL, "Device does not support dFdyFine, fallback to dFdy");
+ ctx.AddF32("{}=dFdy({});", inst, op_a);
+ }
}
void EmitDPdxCoarse(EmitContext& ctx, IR::Inst& inst, std::string_view op_a) {
- ctx.AddF32("{}=dFdxCoarse({});", inst, op_a);
+ if (ctx.profile.support_gl_derivative_control) {
+ ctx.AddF32("{}=dFdxCoarse({});", inst, op_a);
+ } else {
+ LOG_WARNING(Shader_GLSL, "Device does not support dFdxCoarse, fallback to dFdx");
+ ctx.AddF32("{}=dFdx({});", inst, op_a);
+ }
}
void EmitDPdyCoarse(EmitContext& ctx, IR::Inst& inst, std::string_view op_a) {
- ctx.AddF32("{}=dFdyCoarse({});", inst, op_a);
+ if (ctx.profile.support_gl_derivative_control) {
+ ctx.AddF32("{}=dFdyCoarse({});", inst, op_a);
+ } else {
+ LOG_WARNING(Shader_GLSL, "Device does not support dFdyCoarse, fallback to dFdy");
+ ctx.AddF32("{}=dFdy({});", inst, op_a);
+ }
}
} // namespace Shader::Backend::GLSL