47
47
const gl_state_index16 tokens[STATE_LENGTH] = { STATE_INTERNAL_DRIVER, var_enum };
48
48
if (*out_var == NULL) {
49
nir_variable *var = nir_variable_create(b->shader,
54
var->num_state_slots = 1;
55
var->state_slots = ralloc_array(var, nir_state_slot, 1);
56
memcpy(var->state_slots[0].tokens, tokens,
57
sizeof(var->state_slots[0].tokens));
49
nir_variable *var = nir_state_variable_create(b->shader, var_type,
58
51
var->data.how_declared = nir_var_hidden;
59
b->shader->num_uniforms++;
62
54
return nir_load_var(b, *out_var);
100
92
nir->info.stage != MESA_SHADER_GEOMETRY)
103
nir_foreach_function(function, nir) {
104
if (function->impl) {
106
nir_builder_init(&b, function->impl);
95
nir_foreach_function_impl(impl, nir) {
96
nir_builder b = nir_builder_create(impl);
108
nir_foreach_block(block, function->impl) {
109
nir_foreach_instr_safe(instr, block) {
110
lower_pos_write(&b, instr, &flip);
98
nir_foreach_block(block, impl) {
99
nir_foreach_instr_safe(instr, block) {
100
lower_pos_write(&b, instr, &flip);
114
nir_metadata_preserve(function->impl, nir_metadata_block_index |
115
nir_metadata_dominance);
104
nir_metadata_preserve(impl, nir_metadata_block_index |
105
nir_metadata_dominance);
159
148
assert(nir->info.stage == MESA_SHADER_FRAGMENT);
160
149
nir_variable *depth_transform = NULL;
161
nir_foreach_function(function, nir) {
162
if (function->impl) {
164
nir_builder_init(&b, function->impl);
150
nir_foreach_function_impl(impl, nir) {
151
nir_builder b = nir_builder_create(impl);
166
nir_foreach_block(block, function->impl) {
167
nir_foreach_instr_safe(instr, block) {
168
lower_pos_read(&b, instr, &depth_transform);
153
nir_foreach_block(block, impl) {
154
nir_foreach_instr_safe(instr, block) {
155
lower_pos_read(&b, instr, &depth_transform);
172
nir_metadata_preserve(function->impl, nir_metadata_block_index |
173
nir_metadata_dominance);
159
nir_metadata_preserve(impl, nir_metadata_block_index |
160
nir_metadata_dominance);
243
229
nir_ssa_def *def = is_signed ? nir_format_float_to_snorm(b, col, bits) :
244
230
nir_format_float_to_unorm(b, col, bits);
246
def = nir_bcsel(b, nir_ilt(b, def, nir_imm_int(b, 0)),
247
nir_iadd(b, def, nir_imm_int(b, 1 << NUM_BITS)),
232
def = nir_bcsel(b, nir_ilt_imm(b, def, 0),
233
nir_iadd_imm(b, def, 1ull << NUM_BITS),
249
235
nir_instr_rewrite_src(&intr->instr, intr->src + 1, nir_src_for_ssa(def));
255
241
if (nir->info.stage != MESA_SHADER_FRAGMENT)
258
nir_foreach_function(function, nir) {
259
if (function->impl) {
261
nir_builder_init(&b, function->impl);
244
nir_foreach_function_impl(impl, nir) {
245
nir_builder b = nir_builder_create(impl);
263
nir_foreach_block(block, function->impl) {
264
nir_foreach_instr_safe(instr, block) {
265
lower_uint_color_write(&b, instr, is_signed);
247
nir_foreach_block(block, impl) {
248
nir_foreach_instr_safe(instr, block) {
249
lower_uint_color_write(&b, instr, is_signed);
269
nir_metadata_preserve(function->impl, nir_metadata_block_index |
270
nir_metadata_dominance);
253
nir_metadata_preserve(impl, nir_metadata_block_index |
254
nir_metadata_dominance);
427
410
struct invert_depth_state state = { viewport_mask, clip_halfz };
428
nir_foreach_function(function, shader) {
429
if (function->impl) {
431
nir_builder_init(&b, function->impl);
433
nir_foreach_block(block, function->impl) {
434
nir_foreach_instr_safe(instr, block) {
435
invert_depth_instr(&b, instr, &state);
439
if (state.store_pos_instr) {
440
b.cursor = nir_after_block(function->impl->end_block);
441
invert_depth_impl(&b, &state);
444
nir_metadata_preserve(function->impl, nir_metadata_block_index |
445
nir_metadata_dominance);
411
nir_foreach_function_impl(impl, shader) {
412
nir_builder b = nir_builder_create(impl);
414
nir_foreach_block(block, impl) {
415
nir_foreach_instr_safe(instr, block) {
416
invert_depth_instr(&b, instr, &state);
420
if (state.store_pos_instr) {
421
b.cursor = nir_after_block(impl->end_block);
422
invert_depth_impl(&b, &state);
425
nir_metadata_preserve(impl, nir_metadata_block_index |
426
nir_metadata_dominance);
550
nir_foreach_function(function, nir) {
551
if (function->impl) {
553
nir_builder_init(&builder, function->impl);
554
nir_foreach_block(block, function->impl) {
555
nir_foreach_instr_safe(instr, block) {
556
if (instr->type == nir_instr_type_intrinsic)
557
progress |= lower_instr(nir_instr_as_intrinsic(instr),
530
nir_foreach_function_impl(impl, nir) {
531
nir_builder builder = nir_builder_create(impl);
532
nir_foreach_block(block, impl) {
533
nir_foreach_instr_safe(instr, block) {
534
if (instr->type == nir_instr_type_intrinsic)
535
progress |= lower_instr(nir_instr_as_intrinsic(instr),
564
nir_metadata_preserve(function->impl, nir_metadata_block_index |
565
nir_metadata_dominance);
542
nir_metadata_preserve(impl, nir_metadata_block_index |
543
nir_metadata_dominance);
613
590
assert(missing_mask != 0);
615
592
nir_function_impl *impl = nir_shader_get_entrypoint(s);
616
nir_builder_init(&b, impl);
617
b.cursor = nir_before_cf_list(&impl->body);
593
b = nir_builder_at(nir_before_cf_list(&impl->body));
619
595
nir_ssa_def *zero = nir_imm_zero(&b, 4, 32);
620
596
for (unsigned i = 0; i < 2; ++i) {
636
612
nir_metadata_dominance);
640
lower_load_ubo_packed_filter(const nir_instr *instr,
641
UNUSED const void *_options) {
642
if (instr->type != nir_instr_type_intrinsic)
645
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
647
return intr->intrinsic == nir_intrinsic_load_ubo;
651
lower_load_ubo_packed_impl(nir_builder *b, nir_instr *instr,
652
UNUSED void *_options) {
653
nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
655
nir_ssa_def *buffer = intr->src[0].ssa;
656
nir_ssa_def *offset = intr->src[1].ssa;
658
nir_ssa_def *result =
659
build_load_ubo_dxil(b, buffer,
661
nir_dest_num_components(intr->dest),
662
nir_dest_bit_size(intr->dest),
663
nir_intrinsic_align(intr));
668
nir_lower_packed_ubo_loads(nir_shader *nir) {
669
return nir_shader_lower_instructions(nir,
670
lower_load_ubo_packed_filter,
671
lower_load_ubo_packed_impl,
676
616
d3d12_lower_primitive_id(nir_shader *shader)
679
619
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
680
620
nir_ssa_def *primitive_id;
681
nir_builder_init(&b, impl);
621
b = nir_builder_create(impl);
683
623
nir_variable *primitive_id_var = nir_variable_create(shader, nir_var_shader_out,
684
624
glsl_uint_type(), "primitive_id");
771
711
nir_pop_if(b, count_check);
773
vertex_count = nir_iadd(b, vertex_count, nir_imm_int(b, 1));
713
vertex_count = nir_iadd_imm(b, vertex_count, 1);
774
714
nir_store_var(b, vertex_count_var, vertex_count, 0x1);
776
716
nir_instr_remove(&intr->instr);
794
734
nir_function_impl *impl = nir_shader_get_entrypoint(shader);
795
735
nir_variable *tmp_vars[VARYING_SLOT_MAX] = {0};
796
736
nir_variable *out_vars[VARYING_SLOT_MAX] = {0};
797
nir_builder_init(&b, impl);
737
b = nir_builder_create(impl);
799
739
shader->info.gs.vertices_out = (shader->info.gs.vertices_out - 2) * 3;
852
792
nir_io_semantics semantics = nir_intrinsic_io_semantics(intr);
853
793
return semantics.location == FRAG_RESULT_SAMPLE_MASK;
854
794
} else if (intr->intrinsic == nir_intrinsic_store_deref) {
855
nir_variable *var = nir_deref_instr_get_variable(nir_src_as_deref(intr->src[0]));
795
nir_variable *var = nir_intrinsic_get_var(intr, 0);
856
796
return var->data.location == FRAG_RESULT_SAMPLE_MASK;
857
797
} else if (intr->intrinsic == nir_intrinsic_load_sample_id ||
858
798
intr->intrinsic == nir_intrinsic_load_sample_mask_in)
1057
997
if (s->info.stage == MESA_SHADER_TESS_CTRL && !var->data.patch)
1060
nir_foreach_function(func, s) {
1065
nir_builder_init(&b, func->impl);
1067
nir_foreach_block(block, func->impl) {
1000
nir_foreach_function_impl(impl, s) {
1001
nir_builder b = nir_builder_create(impl);
1003
nir_foreach_block(block, impl) {
1068
1004
b.cursor = nir_before_block(block);
1069
1005
if (s->info.stage != MESA_SHADER_GEOMETRY) {
1070
1006
write_0(&b, nir_build_deref_var(&b, var));