glasm: Add support for non-2D texture samples
This commit is contained in:
		| @@ -8,21 +8,43 @@ | ||||
| #include "shader_recompiler/frontend/ir/value.h" | ||||
|  | ||||
| namespace Shader::Backend::GLASM { | ||||
|  | ||||
| namespace { | ||||
| std::string Texture([[maybe_unused]] EmitContext& ctx, IR::TextureInstInfo info, | ||||
|                     [[maybe_unused]] const IR::Value& index) { | ||||
|     // FIXME | ||||
|     return fmt::format("texture[{}]", info.descriptor_index); | ||||
| } | ||||
|  | ||||
| std::string_view TextureType(IR::TextureInstInfo info) { | ||||
|     switch (info.type) { | ||||
|     case TextureType::Color1D: | ||||
|         return "1D"; | ||||
|     case TextureType::ColorArray1D: | ||||
|         return "ARRAY1D"; | ||||
|     case TextureType::Color2D: | ||||
|         return "2D"; | ||||
|     case TextureType::ColorArray2D: | ||||
|         return "ARRAY2D"; | ||||
|     case TextureType::Color3D: | ||||
|         return "3D"; | ||||
|     case TextureType::ColorCube: | ||||
|         return "CUBE"; | ||||
|     case TextureType::ColorArrayCube: | ||||
|         return "ARRAYCUBE"; | ||||
|     case TextureType::Buffer: | ||||
|         return "BUFFER"; | ||||
|     } | ||||
|     throw InvalidArgument("Invalid texture type {}", info.type.Value()); | ||||
| } | ||||
| } // Anonymous namespace | ||||
|  | ||||
| void EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst& inst, const IR::Value& index, | ||||
|                                 const IR::Value& coord, Register bias_lc, | ||||
|                                 [[maybe_unused]] const IR::Value& offset) { | ||||
|                                 const IR::Value& coord, Register bias_lc, const IR::Value& offset) { | ||||
|     const auto info{inst.Flags<IR::TextureInstInfo>()}; | ||||
|     const auto sparse_inst{inst.GetAssociatedPseudoOperation(IR::Opcode::GetSparseFromOp)}; | ||||
|     const std::string_view sparse_mod{sparse_inst ? ".SPARSE" : ""}; | ||||
|     const std::string_view lod_clamp_mod{info.has_lod_clamp ? ".LODCLAMP" : ""}; | ||||
|     const std::string_view type{"2D"}; // FIXME | ||||
|     const std::string_view type{TextureType(info)}; | ||||
|     const std::string texture{Texture(ctx, info, index)}; | ||||
|     std::string offset_vec; | ||||
|     if (!offset.IsEmpty()) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user