mirror of
				https://github.com/PancakeTAS/lsfg-vk.git
				synced 2025-10-30 07:01:10 +00:00 
			
		
		
		
	switch to index based shader discovery
This commit is contained in:
		
							parent
							
								
									f998647d74
								
							
						
					
					
						commit
						83b869b0c4
					
				
					 1 changed files with 56 additions and 67 deletions
				
			
		|  | @ -13,59 +13,59 @@ | |||
| 
 | ||||
| using namespace Extract; | ||||
| 
 | ||||
| const std::unordered_map<std::string, uint32_t> nameHashTable = {{ | ||||
|     { "p_mipmaps",  0xe365474d }, | ||||
|     { "p_alpha[0]", 0x0bf6c705 }, | ||||
|     { "p_alpha[1]", 0x4badbc24 }, | ||||
|     { "p_alpha[2]", 0x08a0f71c }, | ||||
|     { "p_alpha[3]", 0x5cc4d794 }, | ||||
|     { "p_beta[0]",  0x598efc9c }, | ||||
|     { "p_beta[1]",  0x17e25e8d }, | ||||
|     { "p_beta[2]",  0x6b8971f7 }, | ||||
|     { "p_beta[3]",  0x80a351c9 }, | ||||
|     { "p_beta[4]",  0xda0fcd5a }, | ||||
|     { "p_gamma[0]", 0x9dae0419 }, | ||||
|     { "p_gamma[1]", 0x96285646 }, | ||||
|     { "p_gamma[2]", 0xca44bb67 }, | ||||
|     { "p_gamma[3]", 0xa942fb59 }, | ||||
|     { "p_gamma[4]", 0x31996b8d }, | ||||
|     { "p_delta[0]", 0x9dae0419 }, | ||||
|     { "p_delta[1]", 0x67912aaa }, | ||||
|     { "p_delta[2]", 0xec138d48 }, | ||||
|     { "p_delta[3]", 0xdcb8247f }, | ||||
|     { "p_delta[4]", 0xd37c9bc8 }, | ||||
|     { "p_delta[5]", 0x62973dce }, | ||||
|     { "p_delta[6]", 0xe2ed5f66 }, | ||||
|     { "p_delta[7]", 0xc964a42a }, | ||||
|     { "p_delta[8]", 0x74536ad9 }, | ||||
|     { "p_delta[9]", 0xf472482a }, | ||||
|     { "p_generate", 0x5c040bd5 }, | ||||
|     { "mipmaps",  0xe365474d }, | ||||
|     { "alpha[0]", 0xf37c8aa8 }, | ||||
|     { "alpha[1]", 0xeb7a52d4 }, | ||||
|     { "alpha[2]", 0x8901788e }, | ||||
|     { "alpha[3]", 0xa06a5e36 }, | ||||
|     { "beta[0]",  0x63c16b89 }, | ||||
|     { "beta[1]",  0xe3967ed5 }, | ||||
|     { "beta[2]",  0x570085ee }, | ||||
|     { "beta[3]",  0x4f4530db }, | ||||
|     { "beta[4]",  0x39727389 }, | ||||
|     { "gamma[0]", 0x94c4edf6 }, | ||||
|     { "gamma[1]", 0xf4e32702 }, | ||||
|     { "gamma[2]", 0xa3dc56fc }, | ||||
|     { "gamma[3]", 0x8b5ed8f6 }, | ||||
|     { "gamma[4]", 0x1cbf3c4d }, | ||||
|     { "delta[0]", 0x94c4edf6 }, | ||||
|     { "delta[1]", 0xacfd805b }, | ||||
|     { "delta[2]", 0x891dc48b }, | ||||
|     { "delta[3]", 0x98536d9d }, | ||||
|     { "delta[4]", 0x8e3f2155 }, | ||||
|     { "delta[5]", 0x8f0e70a1 }, | ||||
|     { "delta[6]", 0xd5eca8f1 }, | ||||
|     { "delta[7]", 0xa9e54e37 }, | ||||
|     { "delta[8]", 0x1dee8b84 }, | ||||
|     { "delta[9]", 0x1576c3f5 }, | ||||
|     { "generate", 0x5c040bd5 } | ||||
| const std::unordered_map<std::string, uint32_t> nameIdxTable = {{ | ||||
|     { "mipmaps", 255 }, | ||||
|     { "alpha[0]", 267 }, | ||||
|     { "alpha[1]", 268 }, | ||||
|     { "alpha[2]", 269 }, | ||||
|     { "alpha[3]", 270 }, | ||||
|     { "beta[0]", 275 }, | ||||
|     { "beta[1]", 276 }, | ||||
|     { "beta[2]", 277 }, | ||||
|     { "beta[3]", 278 }, | ||||
|     { "beta[4]", 279 }, | ||||
|     { "gamma[0]", 257 }, | ||||
|     { "gamma[1]", 259 }, | ||||
|     { "gamma[2]", 260 }, | ||||
|     { "gamma[3]", 261 }, | ||||
|     { "gamma[4]", 262 }, | ||||
|     { "delta[0]", 257 }, | ||||
|     { "delta[1]", 263 }, | ||||
|     { "delta[2]", 264 }, | ||||
|     { "delta[3]", 265 }, | ||||
|     { "delta[4]", 266 }, | ||||
|     { "delta[5]", 258 }, | ||||
|     { "delta[6]", 271 }, | ||||
|     { "delta[7]", 272 }, | ||||
|     { "delta[8]", 273 }, | ||||
|     { "delta[9]", 274 }, | ||||
|     { "generate", 256 }, | ||||
|     { "p_mipmaps", 255 }, | ||||
|     { "p_alpha[0]", 290 }, | ||||
|     { "p_alpha[1]", 291 }, | ||||
|     { "p_alpha[2]", 292 }, | ||||
|     { "p_alpha[3]", 293 }, | ||||
|     { "p_beta[0]", 298 }, | ||||
|     { "p_beta[1]", 299 }, | ||||
|     { "p_beta[2]", 300 }, | ||||
|     { "p_beta[3]", 301 }, | ||||
|     { "p_beta[4]", 302 }, | ||||
|     { "p_gamma[0]", 280 }, | ||||
|     { "p_gamma[1]", 282 }, | ||||
|     { "p_gamma[2]", 283 }, | ||||
|     { "p_gamma[3]", 284 }, | ||||
|     { "p_gamma[4]", 285 }, | ||||
|     { "p_delta[0]", 280 }, | ||||
|     { "p_delta[1]", 286 }, | ||||
|     { "p_delta[2]", 287 }, | ||||
|     { "p_delta[3]", 288 }, | ||||
|     { "p_delta[4]", 289 }, | ||||
|     { "p_delta[5]", 281 }, | ||||
|     { "p_delta[6]", 294 }, | ||||
|     { "p_delta[7]", 295 }, | ||||
|     { "p_delta[8]", 296 }, | ||||
|     { "p_delta[9]", 297 }, | ||||
|     { "p_generate", 256 }, | ||||
| }}; | ||||
| 
 | ||||
| namespace { | ||||
|  | @ -74,23 +74,12 @@ namespace { | |||
|         return shaderData; | ||||
|     } | ||||
| 
 | ||||
|     uint32_t fnv1a_hash(const std::vector<uint8_t>& data) { | ||||
|         uint32_t hash = 0x811C9DC5; | ||||
|         for (auto byte : data) { | ||||
|             hash ^= byte; | ||||
|             hash *= 0x01000193; | ||||
|         } | ||||
|         return hash; | ||||
|     } | ||||
| 
 | ||||
|     int on_resource(void*, const peparse::resource& res) { | ||||
|         if (res.type != peparse::RT_RCDATA || res.buf == nullptr || res.buf->bufLen <= 0) | ||||
|             return 0; | ||||
|         std::vector<uint8_t> resource_data(res.buf->bufLen); | ||||
|         std::copy_n(res.buf->buf, res.buf->bufLen, resource_data.data()); | ||||
| 
 | ||||
|         const uint32_t hash = fnv1a_hash(resource_data); | ||||
|         shaders()[hash] = resource_data; | ||||
|         shaders()[res.name] = resource_data; | ||||
|         return 0; | ||||
|     } | ||||
| 
 | ||||
|  | @ -141,8 +130,8 @@ std::vector<uint8_t> Extract::getShader(const std::string& name) { | |||
|     if (shaders().empty()) | ||||
|         throw std::runtime_error("Shaders are not loaded."); | ||||
| 
 | ||||
|     auto hit = nameHashTable.find(name); | ||||
|     if (hit == nameHashTable.end()) | ||||
|     auto hit = nameIdxTable.find(name); | ||||
|     if (hit == nameIdxTable.end()) | ||||
|         throw std::runtime_error("Shader hash not found: " + name); | ||||
| 
 | ||||
|     auto sit = shaders().find(hit->second); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 PancakeTAS
						PancakeTAS