emit_spirv_image: Fix depth image implicit lod sample in compute
Ensures all drivers behave the same way in this case.
This commit is contained in:
		| @@ -355,11 +355,22 @@ Id EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& | ||||
| Id EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, | ||||
|                                   Id coords, Id dref, Id bias_lc, const IR::Value& offset) { | ||||
|     const auto info{inst->Flags<IR::TextureInstInfo>()}; | ||||
|     const ImageOperands operands(ctx, info.has_bias != 0, false, info.has_lod_clamp != 0, bias_lc, | ||||
|                                  offset); | ||||
|     return Emit(&EmitContext::OpImageSparseSampleDrefImplicitLod, | ||||
|                 &EmitContext::OpImageSampleDrefImplicitLod, ctx, inst, ctx.F32[1], | ||||
|                 Texture(ctx, info, index), coords, dref, operands.MaskOptional(), operands.Span()); | ||||
|     if (ctx.stage == Stage::Fragment) { | ||||
|         const ImageOperands operands(ctx, info.has_bias != 0, false, info.has_lod_clamp != 0, | ||||
|                                      bias_lc, offset); | ||||
|         return Emit(&EmitContext::OpImageSparseSampleDrefImplicitLod, | ||||
|                     &EmitContext::OpImageSampleDrefImplicitLod, ctx, inst, ctx.F32[1], | ||||
|                     Texture(ctx, info, index), coords, dref, operands.MaskOptional(), | ||||
|                     operands.Span()); | ||||
|     } else { | ||||
|         // Implicit lods in compute behave on hardware as if sampling from LOD 0. | ||||
|         // This check is to ensure all drivers behave this way. | ||||
|         const Id lod{ctx.Const(0.0f)}; | ||||
|         const ImageOperands operands(ctx, false, true, false, lod, offset); | ||||
|         return Emit(&EmitContext::OpImageSparseSampleDrefExplicitLod, | ||||
|                     &EmitContext::OpImageSampleDrefExplicitLod, ctx, inst, ctx.F32[1], | ||||
|                     Texture(ctx, info, index), coords, dref, operands.Mask(), operands.Span()); | ||||
|     } | ||||
| } | ||||
|  | ||||
| Id EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user