[Mesa-dev] [PATCH 10/10] radv/ac: enable EXT_shader_subgroup_ballot and EXT_shader_subgroup_vote
Jason Ekstrand
jason at jlekstrand.net
Tue Aug 1 05:03:56 UTC 2017
Out of curiosity, are there any tests for this anywhere?
--Jason
On Mon, Jul 31, 2017 at 7:24 PM, Connor Abbott <connora at valvesoftware.com>
wrote:
> From: Connor Abbott <cwabbott0 at gmail.com>
>
> ---
> 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
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170731/f252f6de/attachment-0001.html>
More information about the mesa-dev
mailing list