From 049d340d8e270168bc71f294bd7ea038adb736a4 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Thu, 11 May 2023 09:58:01 -0700 Subject: [PATCH] microsoft/compiler: Remove alu type info from store_dest() We pass in a *typed* value, we don't need to pass in additional type info. That's just more opportunities to get it wrong. Part-of: --- src/microsoft/compiler/nir_to_dxil.c | 198 ++++++++++++--------------- 1 file changed, 91 insertions(+), 107 deletions(-) diff --git a/src/microsoft/compiler/nir_to_dxil.c b/src/microsoft/compiler/nir_to_dxil.c index 4f902d27606..e9e8731a44b 100644 --- a/src/microsoft/compiler/nir_to_dxil.c +++ b/src/microsoft/compiler/nir_to_dxil.c @@ -2072,30 +2072,17 @@ store_dest_value(struct ntd_context *ctx, nir_dest *dest, unsigned chan, static void store_dest(struct ntd_context *ctx, nir_dest *dest, unsigned chan, - const struct dxil_value *value, nir_alu_type type) + const struct dxil_value *value) { - switch (nir_alu_type_get_base_type(type)) { - case nir_type_float: - if (nir_dest_bit_size(*dest) == 64) - ctx->mod.feats.doubles = true; - if (nir_dest_bit_size(*dest) == 16) - ctx->mod.feats.native_low_precision = true; - store_dest_value(ctx, dest, chan, value); - break; - case nir_type_uint: - case nir_type_int: - if (nir_dest_bit_size(*dest) == 16) - ctx->mod.feats.native_low_precision = true; - if (nir_dest_bit_size(*dest) == 64) - ctx->mod.feats.int64_ops = true; - FALLTHROUGH; - case nir_type_bool: - case nir_type_invalid: - store_dest_value(ctx, dest, chan, value); - break; - default: - unreachable("unexpected nir_alu_type"); - } + const struct dxil_type *type = dxil_value_get_type(value); + if (type == ctx->mod.float64_type) + ctx->mod.feats.doubles = true; + if (type == ctx->mod.float16_type || + type == ctx->mod.int16_type) + ctx->mod.feats.native_low_precision = true; + if (type == ctx->mod.int64_type) + ctx->mod.feats.int64_ops = true; + store_dest_value(ctx, dest, chan, value); } static void @@ -2103,8 +2090,7 @@ store_alu_dest(struct ntd_context *ctx, nir_alu_instr *alu, unsigned chan, const struct dxil_value *value) { assert(!alu->dest.saturate); - store_dest(ctx, &alu->dest.dest, chan, value, - nir_op_infos[alu->op].output_type); + store_dest(ctx, &alu->dest.dest, chan, value); } static const struct dxil_value * @@ -2704,7 +2690,7 @@ emit_make_double(struct ntd_context *ctx, nir_alu_instr *alu) const struct dxil_value *v = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!v) return false; - store_dest(ctx, &alu->dest.dest, 0, v, nir_type_float64); + store_dest(ctx, &alu->dest.dest, 0, v); return true; } @@ -2735,8 +2721,8 @@ emit_split_double(struct ntd_context *ctx, nir_alu_instr *alu) if (!hi || !lo) return false; - store_dest(ctx, &alu->dest.dest, 0, hi, nir_type_uint); - store_dest(ctx, &alu->dest.dest, 1, lo, nir_type_uint); + store_dest(ctx, &alu->dest.dest, 0, hi); + store_dest(ctx, &alu->dest.dest, 1, lo); return true; } @@ -3061,7 +3047,7 @@ emit_load_global_invocation_id(struct ntd_context *ctx, if (!globalid) return false; - store_dest(ctx, &intr->dest, i, globalid, nir_type_uint); + store_dest(ctx, &intr->dest, i, globalid); } } return true; @@ -3084,7 +3070,7 @@ emit_load_local_invocation_id(struct ntd_context *ctx, *threadidingroup = emit_threadidingroup_call(ctx, idx); if (!threadidingroup) return false; - store_dest(ctx, &intr->dest, i, threadidingroup, nir_type_uint); + store_dest(ctx, &intr->dest, i, threadidingroup); } } return true; @@ -3100,7 +3086,7 @@ emit_load_local_invocation_index(struct ntd_context *ctx, *flattenedthreadidingroup = emit_flattenedthreadidingroup_call(ctx); if (!flattenedthreadidingroup) return false; - store_dest(ctx, &intr->dest, 0, flattenedthreadidingroup, nir_type_uint); + store_dest(ctx, &intr->dest, 0, flattenedthreadidingroup); return true; } @@ -3120,7 +3106,7 @@ emit_load_local_workgroup_id(struct ntd_context *ctx, const struct dxil_value *groupid = emit_groupid_call(ctx, idx); if (!groupid) return false; - store_dest(ctx, &intr->dest, i, groupid, nir_type_uint); + store_dest(ctx, &intr->dest, i, groupid); } } return true; @@ -3155,7 +3141,7 @@ emit_load_unary_external_function(struct ntd_context *ctx, { const struct dxil_value *value = call_unary_external_function(ctx, name, dxil_intr, get_overload(type, intr->dest.ssa.bit_size)); - store_dest(ctx, &intr->dest, 0, value, type); + store_dest(ctx, &intr->dest, 0, value); return true; } @@ -3174,7 +3160,7 @@ emit_load_sample_mask_in(struct ntd_context *ctx, nir_intrinsic_instr *intr) call_unary_external_function(ctx, "dx.op.sampleIndex", DXIL_INTR_SAMPLE_INDEX, DXIL_I32), 0), 0); } - store_dest(ctx, &intr->dest, 0, value, nir_type_int); + store_dest(ctx, &intr->dest, 0, value); return true; } @@ -3204,12 +3190,12 @@ emit_load_tess_coord(struct ntd_context *ctx, const struct dxil_value *value = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); - store_dest(ctx, &intr->dest, i, value, nir_type_float); + store_dest(ctx, &intr->dest, i, value); } for (unsigned i = num_coords; i < intr->dest.ssa.num_components; ++i) { const struct dxil_value *value = dxil_module_get_float_const(&ctx->mod, 0.0f); - store_dest(ctx, &intr->dest, i, value, nir_type_float); + store_dest(ctx, &intr->dest, i, value); } return true; @@ -3405,7 +3391,7 @@ emit_load_ssbo(struct ntd_context *ctx, nir_intrinsic_instr *intr) dxil_emit_extractval(&ctx->mod, load, i); if (!val) return false; - store_dest(ctx, &intr->dest, i, val, nir_type_uint); + store_dest(ctx, &intr->dest, i, val); } return true; } @@ -3598,8 +3584,7 @@ emit_load_ubo(struct ntd_context *ctx, nir_intrinsic_instr *intr) for (unsigned i = 0; i < nir_dest_num_components(intr->dest); ++i) { const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, agg, i); - store_dest(ctx, &intr->dest, i, retval, - nir_dest_bit_size(intr->dest) > 1 ? nir_type_float : nir_type_bool); + store_dest(ctx, &intr->dest, i, retval); } return true; } @@ -3623,8 +3608,7 @@ emit_load_ubo_dxil(struct ntd_context *ctx, nir_intrinsic_instr *intr) for (unsigned i = 0; i < nir_dest_num_components(intr->dest); i++) store_dest(ctx, &intr->dest, i, - dxil_emit_extractval(&ctx->mod, agg, i), - nir_type_uint); + dxil_emit_extractval(&ctx->mod, agg, i)); return true; } @@ -3867,7 +3851,7 @@ emit_load_input_via_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr const struct dxil_value *retval = dxil_emit_call(&ctx->mod, func, args, num_args); if (!retval) return false; - store_dest(ctx, &intr->dest, i, retval, out_type); + store_dest(ctx, &intr->dest, i, retval); } return true; } @@ -3951,7 +3935,7 @@ emit_load_interpolated_input(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *retval = dxil_emit_call(&ctx->mod, func, args, num_args); if (!retval) return false; - store_dest(ctx, &intr->dest, i, retval, nir_type_float); + store_dest(ctx, &intr->dest, i, retval); } return true; } @@ -3976,7 +3960,7 @@ emit_load_ptr(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4012,7 +3996,7 @@ emit_load_shared(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4048,7 +4032,7 @@ emit_load_scratch(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4244,7 +4228,7 @@ emit_image_load(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *component = dxil_emit_extractval(&ctx->mod, load_result, i); if (!component) return false; - store_dest(ctx, &intr->dest, i, component, out_type); + store_dest(ctx, &intr->dest, i, component); } if (num_components > 1) @@ -4255,7 +4239,7 @@ emit_image_load(struct ntd_context *ctx, nir_intrinsic_instr *intr) static bool emit_image_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, - enum dxil_atomic_op op, nir_alu_type type) + enum dxil_atomic_op op) { nir_deref_instr *src_as_deref = nir_src_as_deref(intr->src[0]); bool is_bindless = !src_as_deref && !nir_intrinsic_has_range_base(intr); @@ -4290,7 +4274,7 @@ emit_image_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, return false; } - const struct dxil_value *value = get_src(ctx, &intr->src[3], 0, type); + const struct dxil_value *value = get_src(ctx, &intr->src[3], 0, nir_type_uint); if (!value) return false; @@ -4300,7 +4284,7 @@ emit_image_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, type); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4349,7 +4333,7 @@ emit_image_atomic_comp_swap(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4406,7 +4390,7 @@ emit_image_size(struct ntd_context *ctx, nir_intrinsic_instr *intr) for (unsigned i = 0; i < nir_dest_num_components(intr->dest); ++i) { const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, dimensions, i); - store_dest(ctx, &intr->dest, i, retval, nir_type_uint); + store_dest(ctx, &intr->dest, i, retval); } return true; @@ -4437,20 +4421,20 @@ emit_get_ssbo_size(struct ntd_context *ctx, nir_intrinsic_instr *intr) return false; const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, dimensions, 0); - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } static bool emit_ssbo_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, - enum dxil_atomic_op op, nir_alu_type type) + enum dxil_atomic_op op) { const struct dxil_value* handle = get_resource_handle(ctx, &intr->src[0], DXIL_RESOURCE_CLASS_UAV, DXIL_RESOURCE_KIND_RAW_BUFFER); const struct dxil_value *offset = get_src(ctx, &intr->src[1], 0, nir_type_uint); const struct dxil_value *value = - get_src(ctx, &intr->src[2], 0, type); + get_src(ctx, &intr->src[2], 0, nir_type_uint); if (!value || !handle || !offset) return false; @@ -4469,7 +4453,7 @@ emit_ssbo_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, type); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4501,13 +4485,13 @@ emit_ssbo_atomic_comp_swap(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_int); + store_dest(ctx, &intr->dest, 0, retval); return true; } static bool emit_shared_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, - enum dxil_rmw_op op, nir_alu_type type) + enum dxil_rmw_op op) { const struct dxil_value *zero, *index; @@ -4528,7 +4512,7 @@ emit_shared_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, if (!ptr) return false; - value = get_src(ctx, &intr->src[1], 0, type); + value = get_src(ctx, &intr->src[1], 0, nir_type_uint); if (!value) return false; @@ -4538,7 +4522,7 @@ emit_shared_atomic(struct ntd_context *ctx, nir_intrinsic_instr *intr, if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, type); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4575,7 +4559,7 @@ emit_shared_atomic_comp_swap(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!retval) return false; - store_dest(ctx, &intr->dest, 0, retval, nir_type_uint); + store_dest(ctx, &intr->dest, 0, retval); return true; } @@ -4603,8 +4587,8 @@ emit_vulkan_resource_index(struct ntd_context *ctx, nir_intrinsic_instr *intr) return false; } - store_dest(ctx, &intr->dest, 0, index_value, nir_type_uint32); - store_dest(ctx, &intr->dest, 1, dxil_module_get_int32_const(&ctx->mod, 0), nir_type_uint32); + store_dest(ctx, &intr->dest, 0, index_value); + store_dest(ctx, &intr->dest, 1, dxil_module_get_int32_const(&ctx->mod, 0)); return true; } @@ -4659,7 +4643,7 @@ emit_load_vulkan_descriptor(struct ntd_context *ctx, nir_intrinsic_instr *intr) } store_dest_value(ctx, &intr->dest, 0, handle); - store_dest(ctx, &intr->dest, 1, get_src(ctx, &intr->src[0], 1, nir_type_uint32), nir_type_uint32); + store_dest(ctx, &intr->dest, 1, get_src(ctx, &intr->src[0], 1, nir_type_uint32)); return true; } @@ -4691,7 +4675,7 @@ emit_load_sample_pos_from_id(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *coord = dxil_emit_binop(&ctx->mod, DXIL_BINOP_ADD, dxil_emit_extractval(&ctx->mod, v, i), dxil_module_get_float_const(&ctx->mod, 0.5f), 0); - store_dest(ctx, &intr->dest, i, coord, nir_type_float32); + store_dest(ctx, &intr->dest, i, coord); } return true; } @@ -4706,7 +4690,7 @@ emit_load_sample_id(struct ntd_context *ctx, nir_intrinsic_instr *intr) return emit_load_unary_external_function(ctx, intr, "dx.op.sampleIndex", DXIL_INTR_SAMPLE_INDEX, nir_type_int); - store_dest(ctx, &intr->dest, 0, dxil_module_get_int32_const(&ctx->mod, 0), nir_type_int); + store_dest(ctx, &intr->dest, 0, dxil_module_get_int32_const(&ctx->mod, 0)); return true; } @@ -4726,7 +4710,7 @@ emit_read_first_invocation(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_int); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4748,7 +4732,7 @@ emit_read_invocation(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_int); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4769,7 +4753,7 @@ emit_vote_eq(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_bool); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4791,7 +4775,7 @@ emit_vote(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_bool); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4811,7 +4795,7 @@ emit_ballot(struct ntd_context *ctx, nir_intrinsic_instr *intr) if (!ret) return false; for (uint32_t i = 0; i < 4; ++i) - store_dest(ctx, &intr->dest, i, dxil_emit_extractval(&ctx->mod, ret, i), nir_type_int); + store_dest(ctx, &intr->dest, i, dxil_emit_extractval(&ctx->mod, ret, i)); return true; } @@ -4832,7 +4816,7 @@ emit_quad_op(struct ntd_context *ctx, nir_intrinsic_instr *intr, enum dxil_quad_ const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_uint); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4865,7 +4849,7 @@ emit_reduce_bitwise(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, nir_type_uint); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -4924,7 +4908,7 @@ emit_reduce(struct ntd_context *ctx, nir_intrinsic_instr *intr) const struct dxil_value *ret = dxil_emit_call(&ctx->mod, func, args, ARRAY_SIZE(args)); if (!ret) return false; - store_dest(ctx, &intr->dest, 0, ret, alu_type); + store_dest(ctx, &intr->dest, 0, ret); return true; } @@ -5012,81 +4996,81 @@ emit_intrinsic(struct ntd_context *ctx, nir_intrinsic_instr *intr) case nir_intrinsic_control_barrier: return emit_control_barrier(ctx, intr); case nir_intrinsic_ssbo_atomic_add: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_ADD, nir_type_int); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_ADD); case nir_intrinsic_ssbo_atomic_imin: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_IMIN, nir_type_int); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_IMIN); case nir_intrinsic_ssbo_atomic_umin: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_UMIN, nir_type_uint); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_UMIN); case nir_intrinsic_ssbo_atomic_imax: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_IMAX, nir_type_int); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_IMAX); case nir_intrinsic_ssbo_atomic_umax: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_UMAX, nir_type_uint); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_UMAX); case nir_intrinsic_ssbo_atomic_and: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_AND, nir_type_uint); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_AND); case nir_intrinsic_ssbo_atomic_or: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_OR, nir_type_uint); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_OR); case nir_intrinsic_ssbo_atomic_xor: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_XOR, nir_type_uint); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_XOR); case nir_intrinsic_ssbo_atomic_exchange: - return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_EXCHANGE, nir_type_int); + return emit_ssbo_atomic(ctx, intr, DXIL_ATOMIC_EXCHANGE); case nir_intrinsic_ssbo_atomic_comp_swap: return emit_ssbo_atomic_comp_swap(ctx, intr); case nir_intrinsic_shared_atomic_add_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_ADD, nir_type_int); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_ADD); case nir_intrinsic_shared_atomic_imin_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_MIN, nir_type_int); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_MIN); case nir_intrinsic_shared_atomic_umin_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_UMIN, nir_type_uint); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_UMIN); case nir_intrinsic_shared_atomic_imax_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_MAX, nir_type_int); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_MAX); case nir_intrinsic_shared_atomic_umax_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_UMAX, nir_type_uint); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_UMAX); case nir_intrinsic_shared_atomic_and_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_AND, nir_type_uint); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_AND); case nir_intrinsic_shared_atomic_or_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_OR, nir_type_uint); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_OR); case nir_intrinsic_shared_atomic_xor_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_XOR, nir_type_uint); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_XOR); case nir_intrinsic_shared_atomic_exchange_dxil: - return emit_shared_atomic(ctx, intr, DXIL_RMWOP_XCHG, nir_type_int); + return emit_shared_atomic(ctx, intr, DXIL_RMWOP_XCHG); case nir_intrinsic_shared_atomic_comp_swap_dxil: return emit_shared_atomic_comp_swap(ctx, intr); case nir_intrinsic_image_deref_atomic_add: case nir_intrinsic_image_atomic_add: case nir_intrinsic_bindless_image_atomic_add: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_ADD, nir_type_int); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_ADD); case nir_intrinsic_image_deref_atomic_imin: case nir_intrinsic_image_atomic_imin: case nir_intrinsic_bindless_image_atomic_imin: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_IMIN, nir_type_int); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_IMIN); case nir_intrinsic_image_deref_atomic_umin: case nir_intrinsic_image_atomic_umin: case nir_intrinsic_bindless_image_atomic_umin: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_UMIN, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_UMIN); case nir_intrinsic_image_deref_atomic_imax: case nir_intrinsic_image_atomic_imax: case nir_intrinsic_bindless_image_atomic_imax: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_IMAX, nir_type_int); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_IMAX); case nir_intrinsic_image_deref_atomic_umax: case nir_intrinsic_image_atomic_umax: case nir_intrinsic_bindless_image_atomic_umax: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_UMAX, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_UMAX); case nir_intrinsic_image_deref_atomic_and: case nir_intrinsic_image_atomic_and: case nir_intrinsic_bindless_image_atomic_and: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_AND, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_AND); case nir_intrinsic_image_deref_atomic_or: case nir_intrinsic_image_atomic_or: case nir_intrinsic_bindless_image_atomic_or: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_OR, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_OR); case nir_intrinsic_image_deref_atomic_xor: case nir_intrinsic_image_atomic_xor: case nir_intrinsic_bindless_image_atomic_xor: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_XOR, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_XOR); case nir_intrinsic_image_deref_atomic_exchange: case nir_intrinsic_image_atomic_exchange: case nir_intrinsic_bindless_image_atomic_exchange: - return emit_image_atomic(ctx, intr, DXIL_ATOMIC_EXCHANGE, nir_type_uint); + return emit_image_atomic(ctx, intr, DXIL_ATOMIC_EXCHANGE); case nir_intrinsic_image_deref_atomic_comp_swap: case nir_intrinsic_image_atomic_comp_swap: case nir_intrinsic_bindless_image_atomic_comp_swap: @@ -5271,7 +5255,7 @@ emit_deref(struct ntd_context* ctx, nir_deref_instr* instr) /* Haven't finished chasing the deref chain yet, just store the value */ if (glsl_type_is_array(type)) { - store_dest(ctx, &instr->dest, 0, binding, nir_type_uint32); + store_dest(ctx, &instr->dest, 0, binding); return true; } @@ -5833,16 +5817,16 @@ emit_tex(struct ntd_context *ctx, nir_tex_instr *instr) case nir_texop_lod: sample = emit_texture_lod(ctx, ¶ms, true); - store_dest(ctx, &instr->dest, 0, sample, nir_alu_type_get_base_type(instr->dest_type)); + store_dest(ctx, &instr->dest, 0, sample); sample = emit_texture_lod(ctx, ¶ms, false); - store_dest(ctx, &instr->dest, 1, sample, nir_alu_type_get_base_type(instr->dest_type)); + store_dest(ctx, &instr->dest, 1, sample); return true; case nir_texop_query_levels: { params.lod_or_sample = dxil_module_get_int_const(&ctx->mod, 0, 32); sample = emit_texture_size(ctx, ¶ms); const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, sample, 3); - store_dest(ctx, &instr->dest, 0, retval, nir_alu_type_get_base_type(instr->dest_type)); + store_dest(ctx, &instr->dest, 0, retval); return true; } @@ -5850,7 +5834,7 @@ emit_tex(struct ntd_context *ctx, nir_tex_instr *instr) params.lod_or_sample = int_undef; sample = emit_texture_size(ctx, ¶ms); const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, sample, 3); - store_dest(ctx, &instr->dest, 0, retval, nir_alu_type_get_base_type(instr->dest_type)); + store_dest(ctx, &instr->dest, 0, retval); return true; } @@ -5864,7 +5848,7 @@ emit_tex(struct ntd_context *ctx, nir_tex_instr *instr) for (unsigned i = 0; i < nir_dest_num_components(instr->dest); ++i) { const struct dxil_value *retval = dxil_emit_extractval(&ctx->mod, sample, i); - store_dest(ctx, &instr->dest, i, retval, nir_alu_type_get_base_type(instr->dest_type)); + store_dest(ctx, &instr->dest, i, retval); } return true;