diff options
author | Vadim Girlin <[email protected]> | 2012-12-18 17:39:19 +0400 |
---|---|---|
committer | Vadim Girlin <[email protected]> | 2012-12-18 17:40:57 +0400 |
commit | 8cf552b1823e6c0ea8ce0465937920b4cab83465 (patch) | |
tree | f23f9db5e46713de9f563ee820bfe6acdf63619a /src/gallium/drivers/radeonsi | |
parent | 3b89fcbe548091d6b6fbb68a4d426956d96b2351 (diff) |
radeon/llvm: improve cube map handling
Add support for TEX2, TXB2, TXL2, fix SHADOWCUBE
Signed-off-by: Vadim Girlin <[email protected]>
Reviewed-by: Michel Dänzer <[email protected]>
Tested-by: Michel Dänzer <[email protected]>
Diffstat (limited to 'src/gallium/drivers/radeonsi')
-rw-r--r-- | src/gallium/drivers/radeonsi/radeonsi_shader.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.c b/src/gallium/drivers/radeonsi/radeonsi_shader.c index a452d4bbe9b..5dab46e4d6d 100644 --- a/src/gallium/drivers/radeonsi/radeonsi_shader.c +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.c @@ -813,11 +813,21 @@ static void tex_fetch_args( emit_data->args[1] = lp_build_emit_fetch(bld_base, emit_data->inst, 0, LP_CHAN_ALL); + if (inst->Instruction.Opcode == TGSI_OPCODE_TEX2 || + inst->Instruction.Opcode == TGSI_OPCODE_TXB2 || + inst->Instruction.Opcode == TGSI_OPCODE_TXL2) { + /* These instructions have additional operand that should be packed + * into the cube coord vector by radeon_llvm_emit_prepare_cube_coords. + * That operand should be passed as a float value in the args array + * right after the coord vector. After packing it's not used anymore, + * that's why arg_count is not increased */ + emit_data->args[2] = lp_build_emit_fetch(bld_base, inst, 1, 0); + } + if ((inst->Texture.Texture == TGSI_TEXTURE_CUBE || inst->Texture.Texture == TGSI_TEXTURE_SHADOWCUBE) && inst->Instruction.Opcode != TGSI_OPCODE_TXQ) { - radeon_llvm_emit_prepare_cube_coords(bld_base, &emit_data->args[1], - inst->Texture.Texture); + radeon_llvm_emit_prepare_cube_coords(bld_base, emit_data, 1); } /* Resource */ |