浏览代码

zink/spirv: inline get_uvec_constant into emit_load_const

This is the only call-site that wants to specify unique values per
component for any of the get_*_constant functions. So let's give this
its own implementation instead, so we can ease the burden for the rest.

Acked-by: Jordan Justen <jordan.l.justen@intel.com>
tags/19.3-branchpoint
Erik Faye-Lund 6 年前
父节点
当前提交
3ceba2d312
共有 1 个文件被更改,包括 17 次插入3 次删除
  1. 17
    3
      src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c

+ 17
- 3
src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c 查看文件

@@ -1007,9 +1007,23 @@ emit_load_const(struct ntv_context *ctx, nir_load_const_instr *load_const)
for (int i = 0; i < load_const->def.num_components; ++i)
values[i] = load_const->value[i].u32;

SpvId constant = get_uvec_constant(ctx, load_const->def.bit_size,
load_const->def.num_components,
values);
unsigned bit_size = load_const->def.bit_size;
unsigned num_components = load_const->def.num_components;

SpvId constant;
if (num_components > 1) {
SpvId components[num_components];
for (int i = 0; i < num_components; i++)
components[i] = emit_uint_const(ctx, bit_size, values[i]);

SpvId type = get_uvec_type(ctx, bit_size, num_components);
constant = spirv_builder_const_composite(&ctx->builder, type,
components, num_components);
} else {
assert(num_components == 1);
constant = emit_uint_const(ctx, bit_size, values[0]);
}

store_ssa_def_uint(ctx, &load_const->def, constant);
}


正在加载...
取消
保存