mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-28 22:49:02 -05:00 
			
		
		
		
	gl_shader_decompiler: Inline textureGather component
This commit is contained in:
		| @@ -689,7 +689,7 @@ private: | ||||
|     } | ||||
|  | ||||
|     std::string GenerateTexture(Operation operation, const std::string& func, | ||||
|                                 std::string extra_cast(std::string) = nullptr) { | ||||
|                                 bool is_extra_int = false) { | ||||
|         constexpr std::array<const char*, 4> coord_constructors = {"float", "vec2", "vec3", "vec4"}; | ||||
|  | ||||
|         const auto& meta = std::get<MetaTexture>(operation.GetMeta()); | ||||
| @@ -706,15 +706,24 @@ private: | ||||
|             const bool is_extra = i >= meta.coords_count; | ||||
|             const bool is_array = i == meta.array_index; | ||||
|  | ||||
|             std::string operand = Visit(operation[i]); | ||||
|             if (is_extra && extra_cast != nullptr) { | ||||
|                 operand = extra_cast(operand); | ||||
|             } | ||||
|             std::string operand = [&]() { | ||||
|                 if (is_extra && is_extra_int) { | ||||
|                     if (const auto immediate = std::get_if<ImmediateNode>(operation[i])) { | ||||
|                         return std::to_string(static_cast<s32>(immediate->GetValue())); | ||||
|                     } else { | ||||
|                         return "ftoi(" + Visit(operation[i]) + ')'; | ||||
|                     } | ||||
|                 } else { | ||||
|                     return Visit(operation[i]); | ||||
|                 } | ||||
|             }(); | ||||
|             if (is_array) { | ||||
|                 ASSERT(!is_extra); | ||||
|                 operand = "float(ftoi(" + operand + "))"; | ||||
|             } | ||||
|  | ||||
|             expr += operand; | ||||
|  | ||||
|             if (i + 1 == meta.coords_count) { | ||||
|                 expr += ')'; | ||||
|             } | ||||
| @@ -1118,16 +1127,8 @@ private: | ||||
|  | ||||
|     std::string F4TextureGather(Operation operation) { | ||||
|         const auto meta = std::get<MetaTexture>(operation.GetMeta()); | ||||
|  | ||||
|         std::string expr; | ||||
|         if (meta.sampler.IsShadow()) { | ||||
|             expr = GenerateTexture(operation, "textureGather", | ||||
|                                    [](std::string ref_z) { return ref_z; }); | ||||
|         } else { | ||||
|             expr = GenerateTexture(operation, "textureGather", | ||||
|                                    [](std::string comp) { return "ftoi(" + comp + ')'; }); | ||||
|         } | ||||
|         return expr + GetSwizzle(meta.element); | ||||
|         return GenerateTexture(operation, "textureGather", !meta.sampler.IsShadow()) + | ||||
|                GetSwizzle(meta.element); | ||||
|     } | ||||
|  | ||||
|     std::string F4TextureQueryDimensions(Operation operation) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ReinUsesLisp
					ReinUsesLisp