소스 검색

radeonsi: add bitcast_inputs() helper

Will be used in a following patch to help support doubles.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
tags/18.1-branchpoint
Timothy Arceri 7 년 전
부모
커밋
cf75ee3ab1
1개의 변경된 파일15개의 추가작업 그리고 6개의 파일을 삭제
  1. 15
    6
      src/gallium/drivers/radeonsi/si_shader_nir.c

+ 15
- 6
src/gallium/drivers/radeonsi/si_shader_nir.c 파일 보기

@@ -644,6 +644,16 @@ si_nir_load_sampler_desc(struct ac_shader_abi *abi,
return si_load_sampler_desc(ctx, list, index, desc_type);
}

static void bitcast_inputs(struct si_shader_context *ctx,
LLVMValueRef data[4],
unsigned input_idx)
{
for (unsigned chan = 0; chan < 4; chan++) {
ctx->inputs[input_idx + chan] =
LLVMBuildBitCast(ctx->ac.builder, data[chan], ctx->ac.i32, "");
}
}

bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
{
struct tgsi_shader_info *info = &ctx->shader->selector->info;
@@ -667,15 +677,14 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir)
if (processed_inputs & ((uint64_t)1 << loc))
continue;

if (nir->info.stage == MESA_SHADER_VERTEX)
if (nir->info.stage == MESA_SHADER_VERTEX) {
declare_nir_input_vs(ctx, variable, data);
else if (nir->info.stage == MESA_SHADER_FRAGMENT)
bitcast_inputs(ctx, data, input_idx);
} else if (nir->info.stage == MESA_SHADER_FRAGMENT) {
declare_nir_input_fs(ctx, variable, input_idx / 4, data);

for (unsigned chan = 0; chan < 4; chan++) {
ctx->inputs[input_idx + chan] =
LLVMBuildBitCast(ctx->ac.builder, data[chan], ctx->ac.i32, "");
bitcast_inputs(ctx, data, input_idx);
}

processed_inputs |= ((uint64_t)1 << loc);
}
}

Loading…
취소
저장