diff options
author | Dave Airlie <[email protected]> | 2015-12-09 17:02:38 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2015-12-09 17:04:04 +1000 |
commit | e307cfa7d9a6c4c44be9d0fb50a113024646029e (patch) | |
tree | d79063eb251333adaeacfa0bd09c6b6a371f9eac | |
parent | 8c9e40ac22ce5a60753172a8f95a120d84a3ec4c (diff) |
radeonsi: handle loading doubles as geometry shader inputs.
This adds the double code to the geometry shader input handling.
Reviewed-by: Michel Dänzer <[email protected]>
Cc: "11.0 11.1" <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
-rw-r--r-- | src/gallium/drivers/radeonsi/si_shader.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index e2cf27dcce9..1baa2eb2178 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -741,6 +741,7 @@ static LLVMValueRef fetch_input_gs( unsigned semantic_name = info->input_semantic_name[reg->Register.Index]; unsigned semantic_index = info->input_semantic_index[reg->Register.Index]; unsigned param; + LLVMValueRef value; if (swizzle != ~0 && semantic_name == TGSI_SEMANTIC_PRIMID) return get_primitive_id(bld_base, swizzle); @@ -782,11 +783,22 @@ static LLVMValueRef fetch_input_gs( args[7] = uint->zero; /* SLC */ args[8] = uint->zero; /* TFE */ + value = lp_build_intrinsic(gallivm->builder, + "llvm.SI.buffer.load.dword.i32.i32", + i32, args, 9, + LLVMReadOnlyAttribute | LLVMNoUnwindAttribute); + if (type == TGSI_TYPE_DOUBLE) { + LLVMValueRef value2; + args[2] = lp_build_const_int32(gallivm, (param * 4 + swizzle + 1) * 256); + value2 = lp_build_intrinsic(gallivm->builder, + "llvm.SI.buffer.load.dword.i32.i32", + i32, args, 9, + LLVMReadOnlyAttribute | LLVMNoUnwindAttribute); + return radeon_llvm_emit_fetch_double(bld_base, + value, value2); + } return LLVMBuildBitCast(gallivm->builder, - lp_build_intrinsic(gallivm->builder, - "llvm.SI.buffer.load.dword.i32.i32", - i32, args, 9, - LLVMReadOnlyAttribute | LLVMNoUnwindAttribute), + value, tgsi2llvmtype(bld_base, type), ""); } |