From 7d501f8d083d084096f59a7a94ebe760e04f7c4d Mon Sep 17 00:00:00 2001 From: Andrzej Janik Date: Thu, 29 Feb 2024 12:25:57 +0100 Subject: [PATCH] Add supprot for tex.level --- ptx/lib/zluda_ptx_impl.bc | Bin 144764 -> 154400 bytes ptx/lib/zluda_ptx_impl.cpp | 120 ++++++++++++++++++++++++------------- ptx/src/ast.rs | 21 +++---- ptx/src/ptx.lalrpop | 62 ++++++++++++++++--- ptx/src/raytracing.rs | 6 +- ptx/src/translate.rs | 29 +++++++-- 6 files changed, 173 insertions(+), 65 deletions(-) diff --git a/ptx/lib/zluda_ptx_impl.bc b/ptx/lib/zluda_ptx_impl.bc index 48ea22b8902095dd36ce79adfedb42c3358515e1..e8d5915325aebdb14a94666387091d417d332004 100644 GIT binary patch literal 154400 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�onIKyw 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

tkMC;7>~*X^e`@!3Fu;cDihGhs45fC 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 \ - return tex2D(textureObject, float(coord.x), float(coord.y)).data; \ - } \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##2 ::Native_vec_ coord) \ - { \ - hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ - return tex2D(textureObject, float(coord.x), float(coord.y)).data; \ +#define tex_2d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, HIP_COORD_TYPE##2 ::Native_vec_ coord) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex2D(textureObject, float(coord.x), float(coord.y)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, HIP_COORD_TYPE##2 ::Native_vec_ coord, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex2DLod(textureObject, float(coord.x), float(coord.y), float(lod)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##2 ::Native_vec_ coord) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex2D(textureObject, float(coord.x), float(coord.y)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_indirect_2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##2 ::Native_vec_ coord, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex2DLod(textureObject, float(coord.x), float(coord.y), float(lod)).data; \ } __device__ half4 __ockl_image_sampleh_2D(unsigned int CONSTANT_SPACE *i, unsigned int ADDRESS_SPACE_CONSTANT *s, float2::Native_vec_ c); @@ -357,16 +367,26 @@ extern "C" tex_2d_f16(s32, int); tex_2d_f16(f32, float); -#define tex_3d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, HIP_COORD_TYPE##4 ::Native_vec_ coord) \ - { \ - hipTextureObject_t textureObject = ptr->textureObject; \ - return tex3D(textureObject, float(coord.x), float(coord.y), float(coord.z)).data; \ - } \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##4 ::Native_vec_ coord) \ - { \ - hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ - return tex3D(textureObject, float(coord.x), float(coord.y), float(coord.z)).data; \ +#define tex_3d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, HIP_COORD_TYPE##4 ::Native_vec_ coord) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex3D(textureObject, float(coord.x), float(coord.y), float(coord.z)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, HIP_COORD_TYPE##4 ::Native_vec_ coord, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex3DLod(textureObject, float(coord.x), float(coord.y), float(coord.z), float(lod)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##4 ::Native_vec_ coord) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex3D(textureObject, float(coord.x), float(coord.y), float(coord.z)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_indirect_3d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, HIP_COORD_TYPE##4 ::Native_vec_ coord, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex3DLod(textureObject, float(coord.x), float(coord.y), float(coord.z), float(lod)).data; \ } __device__ half4 __ockl_image_sampleh_3D(unsigned int CONSTANT_SPACE *i, unsigned int ADDRESS_SPACE_CONSTANT *s, float4::Native_vec_ c); @@ -393,16 +413,26 @@ extern "C" tex_3d_f16(s32, int); tex_3d_f16(f32, float); -#define tex_a1d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x) \ - { \ - hipTextureObject_t textureObject = ptr->textureObject; \ - return tex1DLayered(textureObject, float(x), int(layer)).data; \ - } \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x) \ - { \ - hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ - return tex1DLayered(textureObject, float(x), int(layer)).data; \ +#define tex_a1d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex1DLayered(textureObject, float(x), int(layer)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex1DLayeredLod(textureObject, float(x), int(layer), float(lod)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex1DLayered(textureObject, float(x), int(layer)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_indirect_a1d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex1DLayeredLod(textureObject, float(x), int(layer), float(lod)).data; \ } __device__ half4 __ockl_image_sampleh_1Da(unsigned int CONSTANT_SPACE *i, unsigned int ADDRESS_SPACE_CONSTANT *s, float2::Native_vec_ c); @@ -429,16 +459,26 @@ extern "C" tex_a1d_f16(s32, int); tex_a1d_f16(f32, float); -#define tex_a2d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y) \ - { \ - hipTextureObject_t textureObject = ptr->textureObject; \ - return tex2DLayered(textureObject, float(x), float(y), int(layer)).data; \ - } \ - HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y) \ - { \ - hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ - return tex2DLayered(textureObject, float(x), float(y), int(layer)).data; \ +#define tex_a2d(CHANNEL_TYPE, HIP_CHANNEL_TYPE, COORD_TYPE, HIP_COORD_TYPE) \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex2DLayered(textureObject, float(x), float(y), int(layer)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(struct textureReference GLOBAL_SPACE * ptr, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = ptr->textureObject; \ + return tex2DLayeredLod(textureObject, float(x), float(y), int(layer), float(lod)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_indirect_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex2DLayered(textureObject, float(x), float(y), int(layer)).data; \ + } \ + HIP_CHANNEL_TYPE##4 ::Native_vec_ FUNC(tex_level_indirect_a2d_v4_##CHANNEL_TYPE##_##COORD_TYPE)(uint64_t texobj, uint32_t layer, HIP_COORD_TYPE x, HIP_COORD_TYPE y, HIP_COORD_TYPE lod) \ + { \ + hipTextureObject_t textureObject = (hipTextureObject_t)texobj; \ + return tex2DLayeredLod(textureObject, float(x), float(y), int(layer), float(lod)).data; \ } __device__ half4 __ockl_image_sampleh_2Da(unsigned int CONSTANT_SPACE *i, unsigned int ADDRESS_SPACE_CONSTANT *s, float4::Native_vec_ c); diff --git a/ptx/src/ast.rs b/ptx/src/ast.rs index bf5de1c..df6c75e 100644 --- a/ptx/src/ast.rs +++ b/ptx/src/ast.rs @@ -459,8 +459,8 @@ pub enum Instruction { Membar { level: MemScope, }, - Tex(TexDetails, Arg4Tex

), - Suld(SurfaceDetails, Arg4Tex

), + Tex(TexDetails, Arg5Tex

), + Suld(SurfaceDetails, Arg5Tex

), Sust(SurfaceDetails, Arg4Sust

), Shfl(ShflMode, Arg5Shfl

), Shf(FunnelShift, Arg4

), @@ -616,13 +616,6 @@ pub struct Arg4Setp { pub src2: P::Operand, } -pub struct Arg4Tex { - pub dst: P::Operand, - pub image: P::Operand, - pub layer: Option, - pub coordinates: P::Operand, -} - pub struct Arg4Sust { pub image: P::Operand, pub coordinates: P::Operand, @@ -638,6 +631,14 @@ pub struct Arg5 { pub src4: P::Operand, } +pub struct Arg5Tex { + pub dst: P::Operand, + pub image: P::Operand, + pub layer: Option, + pub coordinates: P::Operand, + pub lod: Option, +} + pub struct Arg5Setp { pub dst1: P::Id, pub dst2: Option, @@ -1316,7 +1317,7 @@ pub enum TuningDirective { MaxNtid(u32, u32, u32), ReqNtid(u32, u32, u32), MinNCtaPerSm(u32), - Noreturn + Noreturn, } #[repr(u8)] diff --git a/ptx/src/ptx.lalrpop b/ptx/src/ptx.lalrpop index e1aaa3b..08fe495 100644 --- a/ptx/src/ptx.lalrpop +++ b/ptx/src/ptx.lalrpop @@ -97,6 +97,7 @@ match { ".l", ".le", ".leu", + ".level", ".lo", ".loc", ".local", @@ -2065,11 +2066,23 @@ InstMembar: ast::Instruction> = { // https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#texture-instructions-tex InstTex: ast::Instruction> = { "tex" ".v4" "," "[" "," "]" => { - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates, - layer: None + layer: None, + lod: None + }; + let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; + ast::Instruction::Tex(details, args) + }, + "tex" ".level" ".v4" "," "[" "," "]" "," => { + let args = ast::Arg5Tex { + dst, + image, + coordinates, + layer: None, + lod: Some(lod) }; let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; ast::Instruction::Tex(details, args) @@ -2080,11 +2093,25 @@ InstTex: ast::Instruction> = { "tex" ".a1d" ".v4" "," "[" "," "{" "," "}" "]" => { let geometry = ast::TextureGeometry::Array1D; - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates: ast::Operand::VecPack(vec![x]), - layer: Some(layer) + layer: Some(layer), + lod: None + }; + let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; + ast::Instruction::Tex(details, args) + }, + "tex" ".level" ".a1d" ".v4" + "," "[" "," "{" "," "}" "]" "," => { + let geometry = ast::TextureGeometry::Array1D; + let args = ast::Arg5Tex { + dst, + image, + coordinates: ast::Operand::VecPack(vec![x]), + layer: Some(layer), + lod: Some(lod) }; let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; ast::Instruction::Tex(details, args) @@ -2092,11 +2119,25 @@ InstTex: ast::Instruction> = { "tex" ".a2d" ".v4" "," "[" "," "{" "," "," "," RegOrImmediate "}" "]" => { let geometry = ast::TextureGeometry::Array2D; - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates: ast::Operand::VecPack(vec![x, y]), - layer: Some(layer) + layer: Some(layer), + lod: None + }; + let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; + ast::Instruction::Tex(details, args) + }, + "tex" ".level" ".a2d" ".v4" + "," "[" "," "{" "," "," "," RegOrImmediate "}" "]" "," => { + let geometry = ast::TextureGeometry::Array2D; + let args = ast::Arg5Tex { + dst, + image, + coordinates: ast::Operand::VecPack(vec![x, y]), + layer: Some(layer), + lod: Some(lod) }; let details = ast::TexDetails { geometry, channel_type, coordinate_type, direct: false }; ast::Instruction::Tex(details, args) @@ -2106,33 +2147,36 @@ InstTex: ast::Instruction> = { // https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#surface-instructions-suld InstSuld: ast::Instruction> = { "suld" ".b" ".trap" "," "[" "," "]" => { - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates, layer: None, + lod: None, }; let details = ast::SurfaceDetails { geometry, vector, type_, direct: false, }; ast::Instruction::Suld(details, args) }, "suld" ".b" ".a1d" ".trap" "," "[" "," "{" "," "}" "]" => { let geometry = ast::TextureGeometry::Array1D; - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates: ast::Operand::VecPack(vec![x]), layer: Some(layer), + lod: None, }; let details = ast::SurfaceDetails { geometry, vector, type_, direct: false, }; ast::Instruction::Suld(details, args) }, "suld" ".b" ".a2d" ".trap" "," "[" "," "{" "," "," "," RegOrImmediate "}" "]" => { let geometry = ast::TextureGeometry::Array2D; - let args = ast::Arg4Tex { + let args = ast::Arg5Tex { dst, image, coordinates: ast::Operand::VecPack(vec![x, y]), layer: Some(layer), + lod: None, }; let details = ast::SurfaceDetails { geometry, vector, type_, direct: false, }; ast::Instruction::Suld(details, args) diff --git a/ptx/src/raytracing.rs b/ptx/src/raytracing.rs index 4c68a11..25c2e7c 100644 --- a/ptx/src/raytracing.rs +++ b/ptx/src/raytracing.rs @@ -2996,11 +2996,12 @@ fn convert_optix_builtin_variable_and_attribute_access_single_function<'input>( } Statement::Instruction(ast::Instruction::Tex( tex, - ast::Arg4Tex { + ast::Arg5Tex { dst, image, layer, coordinates, + lod, }, )) => { if let Some(StateSpaceRemapping::ToBlock(id, ast::StateSpace::Global, offset)) = @@ -3014,11 +3015,12 @@ fn convert_optix_builtin_variable_and_attribute_access_single_function<'input>( )?; result.push(Statement::Instruction(ast::Instruction::Tex( tex, - ast::Arg4Tex { + ast::Arg5Tex { dst, image, layer, coordinates, + lod, }, ))); } else { diff --git a/ptx/src/translate.rs b/ptx/src/translate.rs index c63a258..b2e3e9a 100644 --- a/ptx/src/translate.rs +++ b/ptx/src/translate.rs @@ -2775,9 +2775,14 @@ fn replace_instructions_with_builtins_impl<'input>( } Statement::Instruction(ast::Instruction::Tex(tex, arg)) => { let geometry = tex.geometry.as_ptx(); + let op_name = if arg.lod.is_none() { + "tex" + } else { + "tex_level" + }; let fn_name = [ ZLUDA_PTX_PREFIX, - "tex", + op_name, tex.suffix(), "_", geometry, @@ -8089,7 +8094,7 @@ fn texture_geometry_to_vec_length(geometry: ast::TextureGeometry) -> u8 { } } -impl ast::Arg4Tex { +impl ast::Arg5Tex { fn map>( self, visitor: &mut V, @@ -8097,7 +8102,7 @@ impl ast::Arg4Tex { geometry: ast::TextureGeometry, value_type: ast::Type, coordinate_type: ast::ScalarType, - ) -> Result, TranslateError> { + ) -> Result, TranslateError> { let dst = visitor.operand( ArgumentDescriptor { op: self.dst, @@ -8144,11 +8149,27 @@ impl ast::Arg4Tex { &ast::Type::Vector(coordinate_type, coord_length), ast::StateSpace::Reg, )?; - Ok(ast::Arg4Tex { + let lod = self + .lod + .map(|lod| { + visitor.operand( + ArgumentDescriptor { + op: lod, + is_dst: false, + is_memory_access: false, + non_default_implicit_conversion: None, + }, + &ast::Type::Scalar(coordinate_type), + ast::StateSpace::Reg, + ) + }) + .transpose()?; + Ok(ast::Arg5Tex { dst, image, layer, coordinates, + lod, }) } }