mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 12:50:10 +01:00
radeon/llvm: add support for TXQ/TXF/DDX/DDY instructions
Signed-off-by: Vadim Girlin <vadimgirlin@gmail.com>
This commit is contained in:
parent
d8a1204854
commit
95ed0e9b6b
6 changed files with 43 additions and 6 deletions
|
|
@ -215,8 +215,6 @@ lp_build_tgsi_inst_llvm(
|
|||
case TGSI_OPCODE_PUSHA:
|
||||
case TGSI_OPCODE_POPA:
|
||||
case TGSI_OPCODE_SAD:
|
||||
case TGSI_OPCODE_TXF:
|
||||
case TGSI_OPCODE_TXQ:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -249,10 +249,14 @@ LLVMModuleRef r600_tgsi_llvm(
|
|||
bld_base->op_actions[TGSI_OPCODE_DP3] = dot_action;
|
||||
bld_base->op_actions[TGSI_OPCODE_DP4] = dot_action;
|
||||
bld_base->op_actions[TGSI_OPCODE_DPH] = dot_action;
|
||||
bld_base->op_actions[TGSI_OPCODE_DDX].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_DDY].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TEX].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXB].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXD].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXL].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXF].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXQ].emit = llvm_emit_tex;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXP].fetch_args = txp_fetch_args;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXP].emit = llvm_emit_tex;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,9 +43,13 @@ let TargetPrefix = "AMDGPU", isTarget = 1 in {
|
|||
def int_AMDGPU_mullit : Intrinsic<[llvm_v4f32_ty], [llvm_float_ty, llvm_float_ty, llvm_float_ty], []>;
|
||||
def int_AMDGPU_tex : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_txb : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_txf : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_txq : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_txd : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_txl : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_trunc : Intrinsic<[llvm_float_ty], [llvm_float_ty], []>;
|
||||
def int_AMDGPU_ddx : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
def int_AMDGPU_ddy : Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []>;
|
||||
}
|
||||
|
||||
let TargetPrefix = "TGSI", isTarget = 1 in {
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ bool llvm::isTexOp(unsigned opcode)
|
|||
{
|
||||
switch(opcode) {
|
||||
default: return false;
|
||||
case AMDIL::TEX_LD:
|
||||
case AMDIL::TEX_GET_TEXTURE_RESINFO:
|
||||
case AMDIL::TEX_SAMPLE:
|
||||
case AMDIL::TEX_SAMPLE_C:
|
||||
case AMDIL::TEX_SAMPLE_L:
|
||||
|
|
@ -80,6 +82,8 @@ bool llvm::isTexOp(unsigned opcode)
|
|||
case AMDIL::TEX_SAMPLE_C_LB:
|
||||
case AMDIL::TEX_SAMPLE_G:
|
||||
case AMDIL::TEX_SAMPLE_C_G:
|
||||
case AMDIL::TEX_GET_GRADIENTS_H:
|
||||
case AMDIL::TEX_GET_GRADIENTS_V:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -387,6 +387,27 @@ def CNDE_INT : R600_3OP <
|
|||
|
||||
/* Texture instructions */
|
||||
|
||||
|
||||
def TEX_LD : R600_TEX <
|
||||
0x03, "TEX_LD",
|
||||
[(set R600_Reg128:$dst, (int_AMDGPU_txf R600_Reg128:$src0, imm:$src1, imm:$src2))]
|
||||
>;
|
||||
|
||||
def TEX_GET_TEXTURE_RESINFO : R600_TEX <
|
||||
0x04, "TEX_GET_TEXTURE_RESINFO",
|
||||
[(set R600_Reg128:$dst, (int_AMDGPU_txq R600_Reg128:$src0, imm:$src1, imm:$src2))]
|
||||
>;
|
||||
|
||||
def TEX_GET_GRADIENTS_H : R600_TEX <
|
||||
0x07, "TEX_GET_GRADIENTS_H",
|
||||
[(set R600_Reg128:$dst, (int_AMDGPU_ddx R600_Reg128:$src0, imm:$src1, imm:$src2))]
|
||||
>;
|
||||
|
||||
def TEX_GET_GRADIENTS_V : R600_TEX <
|
||||
0x08, "TEX_GET_GRADIENTS_V",
|
||||
[(set R600_Reg128:$dst, (int_AMDGPU_ddy R600_Reg128:$src0, imm:$src1, imm:$src2))]
|
||||
>;
|
||||
|
||||
def TEX_SAMPLE : R600_TEX <
|
||||
0x10, "TEX_SAMPLE",
|
||||
[(set R600_Reg128:$dst, (int_AMDGPU_tex R600_Reg128:$src0, imm:$src1, imm:$src2))]
|
||||
|
|
|
|||
|
|
@ -606,6 +606,16 @@ void radeon_llvm_context_init(struct radeon_llvm_context * ctx)
|
|||
|
||||
lp_set_default_actions(bld_base);
|
||||
|
||||
bld_base->op_actions[TGSI_OPCODE_DDX].intr_name = "llvm.AMDGPU.ddx";
|
||||
bld_base->op_actions[TGSI_OPCODE_DDX].fetch_args = tex_fetch_args;
|
||||
bld_base->op_actions[TGSI_OPCODE_DDY].intr_name = "llvm.AMDGPU.ddy";
|
||||
bld_base->op_actions[TGSI_OPCODE_DDY].fetch_args = tex_fetch_args;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXF].fetch_args = tex_fetch_args;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXF].intr_name = "llvm.AMDGPU.txf";
|
||||
bld_base->op_actions[TGSI_OPCODE_TXQ].fetch_args = tex_fetch_args;
|
||||
bld_base->op_actions[TGSI_OPCODE_TXQ].intr_name = "llvm.AMDGPU.txq";
|
||||
|
||||
|
||||
bld_base->op_actions[TGSI_OPCODE_ABS].emit = lp_build_tgsi_intrinsic;
|
||||
bld_base->op_actions[TGSI_OPCODE_ABS].intr_name = "llvm.AMDIL.fabs.";
|
||||
bld_base->op_actions[TGSI_OPCODE_ARL].emit = lp_build_tgsi_intrinsic;
|
||||
|
|
@ -619,10 +629,6 @@ void radeon_llvm_context_init(struct radeon_llvm_context * ctx)
|
|||
bld_base->op_actions[TGSI_OPCODE_CMP].intr_name = "llvm.AMDGPU.cndlt";
|
||||
bld_base->op_actions[TGSI_OPCODE_COS].emit = lp_build_tgsi_intrinsic;
|
||||
bld_base->op_actions[TGSI_OPCODE_COS].intr_name = "llvm.AMDGPU.cos";
|
||||
bld_base->op_actions[TGSI_OPCODE_DDX].emit = lp_build_tgsi_intrinsic;
|
||||
bld_base->op_actions[TGSI_OPCODE_DDX].intr_name = "llvm.AMDGPU.ddx";
|
||||
bld_base->op_actions[TGSI_OPCODE_DDY].emit = lp_build_tgsi_intrinsic;
|
||||
bld_base->op_actions[TGSI_OPCODE_DDY].intr_name = "llvm.AMDGPU.ddy";
|
||||
bld_base->op_actions[TGSI_OPCODE_DIV].emit = lp_build_tgsi_intrinsic;
|
||||
bld_base->op_actions[TGSI_OPCODE_DIV].intr_name = "llvm.AMDGPU.div";
|
||||
bld_base->op_actions[TGSI_OPCODE_ELSE].emit = else_emit;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue