I wrote some crucible tests, but it seems like I never got around to sending them out. I can put a branch up tomorrow. They're dependent on this series that never got any attention, though: https://lists.freedesktop.org/archives/mesa-dev/2017-June/158480.html
On Mon, Jul 31, 2017 at 10:03 PM, Jason Ekstrand <[email protected]> wrote: > Out of curiosity, are there any tests for this anywhere? > > --Jason > > On Mon, Jul 31, 2017 at 7:24 PM, Connor Abbott <[email protected]> > wrote: >> >> From: Connor Abbott <[email protected]> >> >> --- >> src/amd/common/ac_nir_to_llvm.c | 49 >> +++++++++++++++++++++++++++++++++++++++++ >> src/amd/vulkan/radv_device.c | 8 +++++++ >> src/amd/vulkan/radv_pipeline.c | 2 ++ >> 3 files changed, 59 insertions(+) >> >> diff --git a/src/amd/common/ac_nir_to_llvm.c >> b/src/amd/common/ac_nir_to_llvm.c >> index f756b9a..3dd1cbb 100644 >> --- a/src/amd/common/ac_nir_to_llvm.c >> +++ b/src/amd/common/ac_nir_to_llvm.c >> @@ -4142,6 +4142,55 @@ static void visit_intrinsic(struct ac_nir_context >> *ctx, >> case nir_intrinsic_load_patch_vertices_in: >> result = LLVMConstInt(ctx->ac.i32, >> ctx->nctx->options->key.tcs.input_vertices, false); >> break; >> + case nir_intrinsic_ballot: >> + result = ac_build_ballot(&ctx->ac, get_src(ctx, >> instr->src[0])); >> + break; >> + case nir_intrinsic_read_first_invocation: { >> + LLVMValueRef src0 = get_src(ctx, instr->src[0]); >> + ac_build_optimization_barrier(&ctx->ac, &src0); >> + LLVMValueRef srcs[1] = { src0 }; >> + result = ac_build_intrinsic(&ctx->ac, >> "llvm.amdgcn.readfirstlane", >> + ctx->ac.i32, srcs, 1, >> + AC_FUNC_ATTR_NOUNWIND | >> + AC_FUNC_ATTR_READNONE | >> + AC_FUNC_ATTR_CONVERGENT); >> + break; >> + } >> + case nir_intrinsic_read_invocation: { >> + LLVMValueRef src0 = get_src(ctx, instr->src[0]); >> + ac_build_optimization_barrier(&ctx->ac, &src0); >> + LLVMValueRef srcs[2] = { src0, get_src(ctx, instr->src[1]) >> }; >> + result = ac_build_intrinsic(&ctx->ac, >> "llvm.amdgcn.readlane", >> + ctx->ac.i32, srcs, 2, >> + AC_FUNC_ATTR_NOUNWIND | >> + AC_FUNC_ATTR_READNONE | >> + AC_FUNC_ATTR_CONVERGENT); >> + break; >> + } >> + case nir_intrinsic_load_subgroup_invocation: >> + result = ac_get_thread_id(&ctx->ac); >> + break; >> + case nir_intrinsic_load_subgroup_size: >> + result = LLVMConstInt(ctx->ac.i32, 64, 0); >> + break; >> + case nir_intrinsic_vote_all: >> + result = LLVMBuildSExt(ctx->ac.builder, >> + ac_build_vote_all(&ctx->ac, >> + get_src(ctx, >> instr->src[0])), >> + ctx->ac.i32, ""); >> + break; >> + case nir_intrinsic_vote_any: >> + result = LLVMBuildSExt(ctx->ac.builder, >> + ac_build_vote_any(&ctx->ac, >> + get_src(ctx, >> instr->src[0])), >> + ctx->ac.i32, ""); >> + break; >> + case nir_intrinsic_vote_eq: >> + result = LLVMBuildSExt(ctx->ac.builder, >> + ac_build_vote_eq(&ctx->ac, >> + get_src(ctx, >> instr->src[0])), >> + ctx->ac.i32, ""); >> + break; >> default: >> fprintf(stderr, "Unknown intrinsic: "); >> nir_print_instr(&instr->instr, stderr); >> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c >> index eb25872..e8fe086 100644 >> --- a/src/amd/vulkan/radv_device.c >> +++ b/src/amd/vulkan/radv_device.c >> @@ -165,6 +165,14 @@ static const VkExtensionProperties >> common_device_extensions[] = { >> .extensionName = VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME, >> .specVersion = 1, >> }, >> + { >> + .extensionName = >> VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME, >> + .specVersion = 1, >> + }, >> + { >> + .extensionName = >> VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME, >> + .specVersion = 1, >> + }, >> }; >> static const VkExtensionProperties ext_sema_device_extensions[] = { >> { >> diff --git a/src/amd/vulkan/radv_pipeline.c >> b/src/amd/vulkan/radv_pipeline.c >> index 2fc64e8..c354807 100644 >> --- a/src/amd/vulkan/radv_pipeline.c >> +++ b/src/amd/vulkan/radv_pipeline.c >> @@ -234,6 +234,8 @@ radv_shader_compile_to_nir(struct radv_device *device, >> .tessellation = true, >> .int64 = true, >> .variable_pointers = true, >> + .shader_ballot = true, >> + .shader_group_vote = true, >> }; >> entry_point = spirv_to_nir(spirv, module->size / 4, >> spec_entries, num_spec_entries, >> -- >> 2.9.4 >> >> _______________________________________________ >> mesa-dev mailing list >> [email protected] >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
