mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 06:46:40 +08:00 
			
		
		
		
	glsl: Conditionally add EXT_texture_shadow_lod
This commit is contained in:
		
							parent
							
								
									5e7b2b9661
								
							
						
					
					
						commit
						a0d0704aff
					
				| @ -302,9 +302,11 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile | |||||||
|         break; |         break; | ||||||
|     case Stage::Compute: |     case Stage::Compute: | ||||||
|         stage_name = "cs"; |         stage_name = "cs"; | ||||||
|  |         const u32 local_x{std::max(program.workgroup_size[0], 1u)}; | ||||||
|  |         const u32 local_y{std::max(program.workgroup_size[1], 1u)}; | ||||||
|  |         const u32 local_z{std::max(program.workgroup_size[2], 1u)}; | ||||||
|         header += fmt::format("layout(local_size_x={},local_size_y={},local_size_z={}) in;", |         header += fmt::format("layout(local_size_x={},local_size_y={},local_size_z={}) in;", | ||||||
|                               program.workgroup_size[0], program.workgroup_size[1], |                               local_x, local_y, local_z); | ||||||
|                               program.workgroup_size[2]); |  | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|     SetupOutPerVertex(*this, header); |     SetupOutPerVertex(*this, header); | ||||||
| @ -346,7 +348,7 @@ EmitContext::EmitContext(IR::Program& program, Bindings& bindings, const Profile | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmitContext::SetupExtensions() { | void EmitContext::SetupExtensions() { | ||||||
|     if (profile.support_gl_texture_shadow_lod) { |     if (info.uses_shadow_lod && profile.support_gl_texture_shadow_lod) { | ||||||
|         header += "#extension GL_EXT_texture_shadow_lod : enable\n"; |         header += "#extension GL_EXT_texture_shadow_lod : enable\n"; | ||||||
|     } |     } | ||||||
|     if (info.uses_int64) { |     if (info.uses_int64) { | ||||||
|  | |||||||
| @ -636,7 +636,6 @@ void VisitUsages(Info& info, IR::Inst& inst) { | |||||||
|     case IR::Opcode::ImageGatherDref: |     case IR::Opcode::ImageGatherDref: | ||||||
|     case IR::Opcode::ImageFetch: |     case IR::Opcode::ImageFetch: | ||||||
|     case IR::Opcode::ImageQueryDimensions: |     case IR::Opcode::ImageQueryDimensions: | ||||||
|     case IR::Opcode::ImageQueryLod: |  | ||||||
|     case IR::Opcode::ImageGradient: { |     case IR::Opcode::ImageGradient: { | ||||||
|         const TextureType type{inst.Flags<IR::TextureInstInfo>().type}; |         const TextureType type{inst.Flags<IR::TextureInstInfo>().type}; | ||||||
|         info.uses_sampled_1d |= type == TextureType::Color1D || type == TextureType::ColorArray1D; |         info.uses_sampled_1d |= type == TextureType::Color1D || type == TextureType::ColorArray1D; | ||||||
| @ -644,6 +643,15 @@ void VisitUsages(Info& info, IR::Inst& inst) { | |||||||
|             inst.GetAssociatedPseudoOperation(IR::Opcode::GetSparseFromOp) != nullptr; |             inst.GetAssociatedPseudoOperation(IR::Opcode::GetSparseFromOp) != nullptr; | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|  |     case IR::Opcode::ImageQueryLod: { | ||||||
|  |         const auto flags{inst.Flags<IR::TextureInstInfo>()}; | ||||||
|  |         const TextureType type{flags.type}; | ||||||
|  |         info.uses_sampled_1d |= type == TextureType::Color1D || type == TextureType::ColorArray1D; | ||||||
|  |         info.uses_shadow_lod |= flags.is_depth != 0; | ||||||
|  |         info.uses_sparse_residency |= | ||||||
|  |             inst.GetAssociatedPseudoOperation(IR::Opcode::GetSparseFromOp) != nullptr; | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|     case IR::Opcode::ImageRead: { |     case IR::Opcode::ImageRead: { | ||||||
|         const auto flags{inst.Flags<IR::TextureInstInfo>()}; |         const auto flags{inst.Flags<IR::TextureInstInfo>()}; | ||||||
|         info.uses_typeless_image_reads |= flags.image_format == ImageFormat::Typeless; |         info.uses_typeless_image_reads |= flags.image_format == ImageFormat::Typeless; | ||||||
|  | |||||||
| @ -196,6 +196,7 @@ struct Info { | |||||||
|     bool uses_int64_bit_atomics{}; |     bool uses_int64_bit_atomics{}; | ||||||
|     bool uses_global_memory{}; |     bool uses_global_memory{}; | ||||||
|     bool uses_atomic_image_u32{}; |     bool uses_atomic_image_u32{}; | ||||||
|  |     bool uses_shadow_lod{}; | ||||||
| 
 | 
 | ||||||
|     IR::Type used_constant_buffer_types{}; |     IR::Type used_constant_buffer_types{}; | ||||||
|     IR::Type used_storage_buffer_types{}; |     IR::Type used_storage_buffer_types{}; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user