forked from eden-emu/eden
		
	Address review comments
This commit is contained in:
		
							parent
							
								
									95b9f62686
								
							
						
					
					
						commit
						83b1c9de37
					
				
					 4 changed files with 36 additions and 52 deletions
				
			
		|  | @ -45,6 +45,30 @@ void AddRegisterIndexedLdc(Info& info) { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| u32 GetElementSize(IR::Type& used_type, Shader::IR::Opcode opcode) { | ||||
|     switch (opcode) { | ||||
|     case IR::Opcode::GetCbufU8: | ||||
|     case IR::Opcode::GetCbufS8: | ||||
|         used_type |= IR::Type::U8; | ||||
|         return 1; | ||||
|     case IR::Opcode::GetCbufU16: | ||||
|     case IR::Opcode::GetCbufS16: | ||||
|         used_type |= IR::Type::U16; | ||||
|         return 2; | ||||
|     case IR::Opcode::GetCbufU32: | ||||
|         used_type |= IR::Type::U32; | ||||
|         return 4; | ||||
|     case IR::Opcode::GetCbufF32: | ||||
|         used_type |= IR::Type::F32; | ||||
|         return 4; | ||||
|     case IR::Opcode::GetCbufU32x2: | ||||
|         used_type |= IR::Type::U32x2; | ||||
|         return 8; | ||||
|     default: | ||||
|         throw InvalidArgument("Invalid opcode {}", opcode); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GetPatch(Info& info, IR::Patch patch) { | ||||
|     if (!IR::IsGeneric(patch)) { | ||||
|         throw NotImplementedException("Reading non-generic patch {}", patch); | ||||
|  | @ -481,45 +505,16 @@ void VisitUsages(Info& info, IR::Inst& inst) { | |||
|         const IR::Value offset{inst.Arg(1)}; | ||||
|         if (index.IsImmediate()) { | ||||
|             AddConstantBufferDescriptor(info, index.U32(), 1); | ||||
|         } else { | ||||
|             AddRegisterIndexedLdc(info); | ||||
|         } | ||||
| 
 | ||||
|         u32 element_size{}; | ||||
|         switch (inst.GetOpcode()) { | ||||
|         case IR::Opcode::GetCbufU8: | ||||
|         case IR::Opcode::GetCbufS8: | ||||
|             info.used_constant_buffer_types |= IR::Type::U8; | ||||
|             element_size = 1; | ||||
|             break; | ||||
|         case IR::Opcode::GetCbufU16: | ||||
|         case IR::Opcode::GetCbufS16: | ||||
|             info.used_constant_buffer_types |= IR::Type::U16; | ||||
|             element_size = 2; | ||||
|             break; | ||||
|         case IR::Opcode::GetCbufU32: | ||||
|             info.used_constant_buffer_types |= IR::Type::U32; | ||||
|             element_size = 4; | ||||
|             break; | ||||
|         case IR::Opcode::GetCbufF32: | ||||
|             info.used_constant_buffer_types |= IR::Type::F32; | ||||
|             element_size = 4; | ||||
|             break; | ||||
|         case IR::Opcode::GetCbufU32x2: | ||||
|             info.used_constant_buffer_types |= IR::Type::U32x2; | ||||
|             element_size = 8; | ||||
|             break; | ||||
|         default: | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         if (index.IsImmediate()) { | ||||
|             u32 element_size = GetElementSize(info.used_constant_buffer_types, inst.GetOpcode()); | ||||
|             u32& size{info.constant_buffer_used_sizes[index.U32()]}; | ||||
|             if (offset.IsImmediate()) { | ||||
|                 size = Common::AlignUp(std::max(size, offset.U32() + element_size), 16u); | ||||
|             } else { | ||||
|                 size = 0x10'000; | ||||
|             } | ||||
|         } else { | ||||
|             AddRegisterIndexedLdc(info); | ||||
|             GetElementSize(info.used_indirect_cbuf_types, inst.GetOpcode()); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Liam
						Liam