Merge pull request #8008 from ameerj/rescale-offsets-array
rescaling_pass: Fix rescaling Color2DArray ImageFetch offsets
This commit is contained in:
		| @@ -183,6 +183,31 @@ void ScaleIntegerComposite(IR::IREmitter& ir, IR::Inst& inst, const IR::U1& is_s | ||||
|     } | ||||
| } | ||||
|  | ||||
| void ScaleIntegerOffsetComposite(IR::IREmitter& ir, IR::Inst& inst, const IR::U1& is_scaled, | ||||
|                                  size_t index) { | ||||
|     const IR::Value composite{inst.Arg(index)}; | ||||
|     if (composite.IsEmpty()) { | ||||
|         return; | ||||
|     } | ||||
|     const auto info{inst.Flags<IR::TextureInstInfo>()}; | ||||
|     const IR::U32 x{Scale(ir, is_scaled, IR::U32{ir.CompositeExtract(composite, 0)})}; | ||||
|     const IR::U32 y{Scale(ir, is_scaled, IR::U32{ir.CompositeExtract(composite, 1)})}; | ||||
|     switch (info.type) { | ||||
|     case TextureType::ColorArray2D: | ||||
|     case TextureType::Color2D: | ||||
|         inst.SetArg(index, ir.CompositeConstruct(x, y)); | ||||
|         break; | ||||
|     case TextureType::Color1D: | ||||
|     case TextureType::ColorArray1D: | ||||
|     case TextureType::Color3D: | ||||
|     case TextureType::ColorCube: | ||||
|     case TextureType::ColorArrayCube: | ||||
|     case TextureType::Buffer: | ||||
|         // Nothing to patch here | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | ||||
| void SubScaleCoord(IR::IREmitter& ir, IR::Inst& inst, const IR::U1& is_scaled) { | ||||
|     const auto info{inst.Flags<IR::TextureInstInfo>()}; | ||||
|     const IR::Value coord{inst.Arg(1)}; | ||||
| @@ -220,7 +245,7 @@ void SubScaleImageFetch(IR::Block& block, IR::Inst& inst) { | ||||
|     const IR::U1 is_scaled{ir.IsTextureScaled(ir.Imm32(info.descriptor_index))}; | ||||
|     SubScaleCoord(ir, inst, is_scaled); | ||||
|     // Scale ImageFetch offset | ||||
|     ScaleIntegerComposite(ir, inst, is_scaled, 2); | ||||
|     ScaleIntegerOffsetComposite(ir, inst, is_scaled, 2); | ||||
| } | ||||
|  | ||||
| void SubScaleImageRead(IR::Block& block, IR::Inst& inst) { | ||||
| @@ -242,7 +267,7 @@ void PatchImageFetch(IR::Block& block, IR::Inst& inst) { | ||||
|     const IR::U1 is_scaled{ir.IsTextureScaled(ir.Imm32(info.descriptor_index))}; | ||||
|     ScaleIntegerComposite(ir, inst, is_scaled, 1); | ||||
|     // Scale ImageFetch offset | ||||
|     ScaleIntegerComposite(ir, inst, is_scaled, 2); | ||||
|     ScaleIntegerOffsetComposite(ir, inst, is_scaled, 2); | ||||
| } | ||||
|  | ||||
| void PatchImageRead(IR::Block& block, IR::Inst& inst) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user