mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Implement TXQ_B
This commit is contained in:
		
							parent
							
								
									189bd1980c
								
							
						
					
					
						commit
						4841440382
					
				@ -1343,6 +1343,7 @@ public:
 | 
				
			|||||||
        TEX,
 | 
					        TEX,
 | 
				
			||||||
        TEX_B,  // Texture Load Bindless
 | 
					        TEX_B,  // Texture Load Bindless
 | 
				
			||||||
        TXQ,    // Texture Query
 | 
					        TXQ,    // Texture Query
 | 
				
			||||||
 | 
					        TXQ_B,  // Texture Query Bindless
 | 
				
			||||||
        TEXS,   // Texture Fetch with scalar/non-vec4 source/destinations
 | 
					        TEXS,   // Texture Fetch with scalar/non-vec4 source/destinations
 | 
				
			||||||
        TLDS,   // Texture Load with scalar/non-vec4 source/destinations
 | 
					        TLDS,   // Texture Load with scalar/non-vec4 source/destinations
 | 
				
			||||||
        TLD4,   // Texture Load 4
 | 
					        TLD4,   // Texture Load 4
 | 
				
			||||||
@ -1612,6 +1613,7 @@ private:
 | 
				
			|||||||
            INST("110000----111---", Id::TEX, Type::Texture, "TEX"),
 | 
					            INST("110000----111---", Id::TEX, Type::Texture, "TEX"),
 | 
				
			||||||
            INST("1101111010111---", Id::TEX_B, Type::Texture, "TEX_B"),
 | 
					            INST("1101111010111---", Id::TEX_B, Type::Texture, "TEX_B"),
 | 
				
			||||||
            INST("1101111101001---", Id::TXQ, Type::Texture, "TXQ"),
 | 
					            INST("1101111101001---", Id::TXQ, Type::Texture, "TXQ"),
 | 
				
			||||||
 | 
					            INST("1101111101010---", Id::TXQ_B, Type::Texture, "TXQ_B"),
 | 
				
			||||||
            INST("1101-00---------", Id::TEXS, Type::Texture, "TEXS"),
 | 
					            INST("1101-00---------", Id::TEXS, Type::Texture, "TEXS"),
 | 
				
			||||||
            INST("1101101---------", Id::TLDS, Type::Texture, "TLDS"),
 | 
					            INST("1101101---------", Id::TLDS, Type::Texture, "TLDS"),
 | 
				
			||||||
            INST("110010----111---", Id::TLD4, Type::Texture, "TLD4"),
 | 
					            INST("110010----111---", Id::TLD4, Type::Texture, "TLD4"),
 | 
				
			||||||
 | 
				
			|||||||
@ -151,6 +151,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
 | 
				
			|||||||
        WriteTexsInstructionFloat(bb, instr, values);
 | 
					        WriteTexsInstructionFloat(bb, instr, values);
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    case OpCode::Id::TXQ_B:
 | 
				
			||||||
 | 
					        is_bindless = true;
 | 
				
			||||||
    case OpCode::Id::TXQ: {
 | 
					    case OpCode::Id::TXQ: {
 | 
				
			||||||
        if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {
 | 
					        if (instr.txq.UsesMiscMode(TextureMiscMode::NODEP)) {
 | 
				
			||||||
            LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete");
 | 
					            LOG_WARNING(HW_GPU, "TXQ.NODEP implementation is incomplete");
 | 
				
			||||||
@ -160,7 +162,10 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
 | 
				
			|||||||
        // Sadly, not all texture instructions specify the type of texture their sampler
 | 
					        // Sadly, not all texture instructions specify the type of texture their sampler
 | 
				
			||||||
        // uses. This must be fixed at a later instance.
 | 
					        // uses. This must be fixed at a later instance.
 | 
				
			||||||
        const auto& sampler =
 | 
					        const auto& sampler =
 | 
				
			||||||
            GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false);
 | 
					            !is_bindless
 | 
				
			||||||
 | 
					                ? GetSampler(instr.sampler, Tegra::Shader::TextureType::Texture2D, false, false)
 | 
				
			||||||
 | 
					                : GetBindlessSampler(instr.gpr8, Tegra::Shader::TextureType::Texture2D, false,
 | 
				
			||||||
 | 
					                                     false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        u32 indexer = 0;
 | 
					        u32 indexer = 0;
 | 
				
			||||||
        switch (instr.txq.query_type) {
 | 
					        switch (instr.txq.query_type) {
 | 
				
			||||||
@ -171,7 +176,8 @@ u32 ShaderIR::DecodeTexture(NodeBlock& bb, u32 pc) {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};
 | 
					                MetaTexture meta{sampler, {}, {}, {}, {}, {}, {}, element};
 | 
				
			||||||
                const Node value =
 | 
					                const Node value =
 | 
				
			||||||
                    Operation(OperationCode::TextureQueryDimensions, meta, GetRegister(instr.gpr8));
 | 
					                    Operation(OperationCode::TextureQueryDimensions, meta,
 | 
				
			||||||
 | 
					                              GetRegister(instr.gpr8.Value() + (is_bindless ? 1 : 0)));
 | 
				
			||||||
                SetTemporal(bb, indexer++, value);
 | 
					                SetTemporal(bb, indexer++, value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            for (u32 i = 0; i < indexer; ++i) {
 | 
					            for (u32 i = 0; i < indexer; ++i) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user