summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Fernando S2021-10-30 16:45:58 +0200
committerGravatar GitHub2021-10-30 16:45:58 +0200
commit7aa0d97eed750602f7c0745995889f7f00dcb875 (patch)
tree59d43dd5adc1805113544678f02693d518b9f874 /src
parentMerge pull request #6702 from lat9nq/disable-screensaver (diff)
parentemit_spirv_image: Fix depth image implicit lod sample in compute (diff)
downloadyuzu-7aa0d97eed750602f7c0745995889f7f00dcb875.tar.gz
yuzu-7aa0d97eed750602f7c0745995889f7f00dcb875.tar.xz
yuzu-7aa0d97eed750602f7c0745995889f7f00dcb875.zip
Merge pull request #7201 from ameerj/spirv-depth-sampling
emit_spirv_image: Fix depth image implicit lod sample in non-fragment stages
Diffstat (limited to 'src')
-rw-r--r--src/shader_recompiler/backend/spirv/emit_spirv_image.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
index 3588f052b..1d5364309 100644
--- a/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
+++ b/src/shader_recompiler/backend/spirv/emit_spirv_image.cpp
@@ -355,11 +355,22 @@ Id EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value&
355Id EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 355Id EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index,
356 Id coords, Id dref, Id bias_lc, const IR::Value& offset) { 356 Id coords, Id dref, Id bias_lc, const IR::Value& offset) {
357 const auto info{inst->Flags<IR::TextureInstInfo>()}; 357 const auto info{inst->Flags<IR::TextureInstInfo>()};
358 const ImageOperands operands(ctx, info.has_bias != 0, false, info.has_lod_clamp != 0, bias_lc, 358 if (ctx.stage == Stage::Fragment) {
359 offset); 359 const ImageOperands operands(ctx, info.has_bias != 0, false, info.has_lod_clamp != 0,
360 return Emit(&EmitContext::OpImageSparseSampleDrefImplicitLod, 360 bias_lc, offset);
361 &EmitContext::OpImageSampleDrefImplicitLod, ctx, inst, ctx.F32[1], 361 return Emit(&EmitContext::OpImageSparseSampleDrefImplicitLod,
362 Texture(ctx, info, index), coords, dref, operands.MaskOptional(), operands.Span()); 362 &EmitContext::OpImageSampleDrefImplicitLod, ctx, inst, ctx.F32[1],
363 Texture(ctx, info, index), coords, dref, operands.MaskOptional(),
364 operands.Span());
365 } else {
366 // Implicit lods in compute behave on hardware as if sampling from LOD 0.
367 // This check is to ensure all drivers behave this way.
368 const Id lod{ctx.Const(0.0f)};
369 const ImageOperands operands(ctx, false, true, false, lod, offset);
370 return Emit(&EmitContext::OpImageSparseSampleDrefExplicitLod,
371 &EmitContext::OpImageSampleDrefExplicitLod, ctx, inst, ctx.F32[1],
372 Texture(ctx, info, index), coords, dref, operands.Mask(), operands.Span());
373 }
363} 374}
364 375
365Id EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, 376Id EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index,