X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl%2Fglsl_to_nir.cpp;h=a3a85786fcd35095c4dbc10b9f77bf598f24da1b;hb=e40b11bbcb02dde1a8f989ca6545e22414c6f4ce;hp=a70fadc4b1c81bcb2b60e8c2ab27cf4b2976f452;hpb=89b2b0f767e2bf7bc83972c2110b9cdc6a2e1c08;p=mesa.git diff --git a/src/compiler/glsl/glsl_to_nir.cpp b/src/compiler/glsl/glsl_to_nir.cpp index a70fadc4b1c..a3a85786fcd 100644 --- a/src/compiler/glsl/glsl_to_nir.cpp +++ b/src/compiler/glsl/glsl_to_nir.cpp @@ -450,6 +450,10 @@ nir_visitor::visit(ir_variable *ir) var->data.stream = ir->data.stream; if (ir->data.stream & (1u << 31)) var->data.stream |= NIR_STREAM_PACKED; + + var->data.precision = ir->data.precision; + var->data.explicit_location = ir->data.explicit_location; + var->data.from_named_ifc_block = ir->data.from_named_ifc_block; var->data.compact = false; switch(ir->data.mode) { @@ -1369,13 +1373,18 @@ nir_visitor::visit(ir_call *ir) instr->src[3] = nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); param = param->get_next(); + } else if (op == nir_intrinsic_image_deref_load) { + instr->src[3] = nir_src_for_ssa(nir_imm_int(&b, 0)); /* LOD */ } if (!param->is_tail_sentinel()) { instr->src[4] = nir_src_for_ssa(evaluate_rvalue((ir_dereference *)param)); param = param->get_next(); + } else if (op == nir_intrinsic_image_deref_store) { + instr->src[4] = nir_src_for_ssa(nir_imm_int(&b, 0)); /* LOD */ } + nir_builder_instr_insert(&b, &instr->instr); break; } @@ -2692,8 +2701,20 @@ nir_visitor::visit(ir_dereference_array *ir) void nir_visitor::visit(ir_barrier *) { + if (shader->info.stage == MESA_SHADER_COMPUTE) { + nir_intrinsic_instr *shared_barrier = + nir_intrinsic_instr_create(this->shader, + nir_intrinsic_memory_barrier_shared); + nir_builder_instr_insert(&b, &shared_barrier->instr); + } else if (shader->info.stage == MESA_SHADER_TESS_CTRL) { + nir_intrinsic_instr *patch_barrier = + nir_intrinsic_instr_create(this->shader, + nir_intrinsic_memory_barrier_tcs_patch); + nir_builder_instr_insert(&b, &patch_barrier->instr); + } + nir_intrinsic_instr *instr = - nir_intrinsic_instr_create(this->shader, nir_intrinsic_barrier); + nir_intrinsic_instr_create(this->shader, nir_intrinsic_control_barrier); nir_builder_instr_insert(&b, &instr->instr); }