|
|
|
|
|
|
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
|
case TGSI_FILE_SYSTEM_VALUE: { |
|
|
case TGSI_FILE_SYSTEM_VALUE: { |
|
|
nir_intrinsic_instr *load; |
|
|
|
|
|
nir_intrinsic_op op; |
|
|
nir_intrinsic_op op; |
|
|
unsigned ncomp = 1; |
|
|
|
|
|
|
|
|
nir_ssa_def *load; |
|
|
|
|
|
|
|
|
assert(!indirect); |
|
|
assert(!indirect); |
|
|
assert(!dim); |
|
|
assert(!dim); |
|
|
|
|
|
|
|
|
switch (c->scan->system_value_semantic_name[index]) { |
|
|
switch (c->scan->system_value_semantic_name[index]) { |
|
|
case TGSI_SEMANTIC_VERTEXID_NOBASE: |
|
|
case TGSI_SEMANTIC_VERTEXID_NOBASE: |
|
|
op = nir_intrinsic_load_vertex_id_zero_base; |
|
|
op = nir_intrinsic_load_vertex_id_zero_base; |
|
|
|
|
|
load = nir_load_vertex_id_zero_base(b); |
|
|
break; |
|
|
break; |
|
|
case TGSI_SEMANTIC_VERTEXID: |
|
|
case TGSI_SEMANTIC_VERTEXID: |
|
|
op = nir_intrinsic_load_vertex_id; |
|
|
op = nir_intrinsic_load_vertex_id; |
|
|
|
|
|
load = nir_load_vertex_id(b); |
|
|
break; |
|
|
break; |
|
|
case TGSI_SEMANTIC_BASEVERTEX: |
|
|
case TGSI_SEMANTIC_BASEVERTEX: |
|
|
op = nir_intrinsic_load_base_vertex; |
|
|
op = nir_intrinsic_load_base_vertex; |
|
|
|
|
|
load = nir_load_base_vertex(b); |
|
|
break; |
|
|
break; |
|
|
case TGSI_SEMANTIC_INSTANCEID: |
|
|
case TGSI_SEMANTIC_INSTANCEID: |
|
|
op = nir_intrinsic_load_instance_id; |
|
|
op = nir_intrinsic_load_instance_id; |
|
|
|
|
|
load = nir_load_instance_id(b); |
|
|
break; |
|
|
break; |
|
|
default: |
|
|
default: |
|
|
unreachable("bad system value"); |
|
|
unreachable("bad system value"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
load = nir_intrinsic_instr_create(b->shader, op); |
|
|
|
|
|
load->num_components = ncomp; |
|
|
|
|
|
|
|
|
|
|
|
nir_ssa_dest_init(&load->instr, &load->dest, ncomp, 32, NULL); |
|
|
|
|
|
nir_builder_instr_insert(b, &load->instr); |
|
|
|
|
|
|
|
|
|
|
|
src = nir_src_for_ssa(&load->dest.ssa); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src = nir_src_for_ssa(load); |
|
|
b->shader->info.system_values_read |= |
|
|
b->shader->info.system_values_read |= |
|
|
(1 << nir_system_value_from_intrinsic(op)); |
|
|
(1 << nir_system_value_from_intrinsic(op)); |
|
|
|
|
|
|