gallivm/nir: add helper invocation support
Reviewed-by: Roland Scheidegger <sroland@vmware.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4574>
This commit is contained in:
@@ -449,10 +449,6 @@ dEQP-GLES31.functional.shaders.builtin_functions.uniform.findLSBMinusOne.mediump
|
||||
dEQP-GLES31.functional.shaders.builtin_functions.uniform.findMSBMinusOne.highp_tess_eval
|
||||
dEQP-GLES31.functional.shaders.builtin_functions.uniform.findMSBZero.lowp_tess_eval
|
||||
dEQP-GLES31.functional.shaders.builtin_var.compute.global_invocation_id
|
||||
dEQP-GLES31.functional.shaders.helper_invocation.derivate.points_max_samples_fwidth
|
||||
dEQP-GLES31.functional.shaders.helper_invocation.derivate.triangles_max_samples_dfdy
|
||||
dEQP-GLES31.functional.shaders.helper_invocation.derivate.wide_lines_dfdx
|
||||
dEQP-GLES31.functional.shaders.helper_invocation.value.lines_max_samples
|
||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.uniform.types.int
|
||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.uniform.types.vec4
|
||||
dEQP-GLES31.functional.shaders.linkage.es31.tessellation.varying.rules.internal_superfluous_declaration
|
||||
|
@@ -1333,6 +1333,9 @@ static void visit_intrinsic(struct lp_build_nir_context *bld_base,
|
||||
case nir_intrinsic_load_patch_vertices_in:
|
||||
bld_base->sysval_intrin(bld_base, instr, result);
|
||||
break;
|
||||
case nir_intrinsic_load_helper_invocation:
|
||||
bld_base->helper_invocation(bld_base, &result[0]);
|
||||
break;
|
||||
case nir_intrinsic_discard_if:
|
||||
case nir_intrinsic_discard:
|
||||
visit_discard(bld_base, instr);
|
||||
|
@@ -174,6 +174,7 @@ struct lp_build_nir_context
|
||||
void (*end_primitive)(struct lp_build_nir_context *bld_base, uint32_t stream_id);
|
||||
|
||||
void (*vote)(struct lp_build_nir_context *bld_base, LLVMValueRef src, nir_intrinsic_instr *instr, LLVMValueRef dst[4]);
|
||||
void (*helper_invocation)(struct lp_build_nir_context *bld_base, LLVMValueRef *dst);
|
||||
// LLVMValueRef main_function
|
||||
};
|
||||
|
||||
|
@@ -1378,6 +1378,14 @@ static void emit_sysval_intrin(struct lp_build_nir_context *bld_base,
|
||||
}
|
||||
}
|
||||
|
||||
static void emit_helper_invocation(struct lp_build_nir_context *bld_base,
|
||||
LLVMValueRef *dst)
|
||||
{
|
||||
struct gallivm_state *gallivm = bld_base->base.gallivm;
|
||||
struct lp_build_context *uint_bld = &bld_base->uint_bld;
|
||||
*dst = lp_build_cmp(uint_bld, PIPE_FUNC_NOTEQUAL, mask_vec(bld_base), lp_build_const_int_vec(gallivm, uint_bld->type, -1));
|
||||
}
|
||||
|
||||
static void bgnloop(struct lp_build_nir_context *bld_base)
|
||||
{
|
||||
struct lp_build_nir_soa_context *bld = (struct lp_build_nir_soa_context *)bld_base;
|
||||
@@ -1729,6 +1737,7 @@ void lp_build_nir_soa(struct gallivm_state *gallivm,
|
||||
bld.bld_base.image_op = emit_image_op;
|
||||
bld.bld_base.image_size = emit_image_size;
|
||||
bld.bld_base.vote = emit_vote;
|
||||
bld.bld_base.helper_invocation = emit_helper_invocation;
|
||||
|
||||
bld.mask = params->mask;
|
||||
bld.inputs = params->inputs;
|
||||
|
Reference in New Issue
Block a user