Mesa (master): spirv: Add support for SPV_EXT_shader_image_atomic_int64
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Nov 9 17:35:47 UTC 2020
Module: Mesa
Branch: master
Commit: 2bbe01b186b943d24e2cc74098959b322a77e9f8
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2bbe01b186b943d24e2cc74098959b322a77e9f8
Author: Jason Ekstrand <jason at jlekstrand.net>
Date: Tue Mar 17 17:57:42 2020 -0500
spirv: Add support for SPV_EXT_shader_image_atomic_int64
Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7509>
---
src/compiler/shader_info.h | 1 +
src/compiler/spirv/spirv_to_nir.c | 23 +++++++++++++++++++----
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index 680fff6afaf..a992ad5f4f3 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -54,6 +54,7 @@ struct spirv_supported_capabilities {
bool image_ms_array;
bool image_read_without_format;
bool image_write_without_format;
+ bool image_atomic_int64;
bool int8;
bool int16;
bool int64;
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 732a9bf9f48..a5288a6032c 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -1333,6 +1333,8 @@ translate_image_format(struct vtn_builder *b, SpvImageFormat format)
case SpvImageFormatRg8ui: return PIPE_FORMAT_R8G8_UINT;
case SpvImageFormatR16ui: return PIPE_FORMAT_R16_UINT;
case SpvImageFormatR8ui: return PIPE_FORMAT_R8_UINT;
+ case SpvImageFormatR64ui: return PIPE_FORMAT_R64_UINT;
+ case SpvImageFormatR64i: return PIPE_FORMAT_R64_SINT;
default:
vtn_fail("Invalid image format: %s (%u)",
spirv_imageformat_to_string(format), format);
@@ -1607,9 +1609,17 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
vtn_fail_if(sampled_type->base_type != vtn_base_type_void,
"Sampled type of OpTypeImage must be void for kernels");
} else {
- vtn_fail_if(sampled_type->base_type != vtn_base_type_scalar ||
- glsl_get_bit_size(sampled_type->type) != 32,
- "Sampled type of OpTypeImage must be a 32-bit scalar");
+ vtn_fail_if(sampled_type->base_type != vtn_base_type_scalar,
+ "Sampled type of OpTypeImage must be a scalar");
+ if (b->options->caps.image_atomic_int64) {
+ vtn_fail_if(glsl_get_bit_size(sampled_type->type) != 32 &&
+ glsl_get_bit_size(sampled_type->type) != 64,
+ "Sampled type of OpTypeImage must be a 32 or 64-bit "
+ "scalar");
+ } else {
+ vtn_fail_if(glsl_get_bit_size(sampled_type->type) != 32,
+ "Sampled type of OpTypeImage must be a 32-bit scalar");
+ }
}
enum glsl_sampler_dim dim;
@@ -3315,7 +3325,8 @@ vtn_handle_image(struct vtn_builder *b, SpvOp opcode,
intrin->num_components = dest_components;
nir_ssa_dest_init(&intrin->instr, &intrin->dest,
- nir_intrinsic_dest_components(intrin), 32, NULL);
+ nir_intrinsic_dest_components(intrin),
+ glsl_get_bit_size(type->type), NULL);
nir_builder_instr_insert(&b->nb, &intrin->instr);
@@ -4460,6 +4471,10 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
spv_check_supported(ray_traversal_primitive_culling, cap);
break;
+ case SpvCapabilityInt64ImageEXT:
+ spv_check_supported(image_atomic_int64, cap);
+ break;
+
default:
vtn_fail("Unhandled capability: %s (%u)",
spirv_capability_to_string(cap), cap);
More information about the mesa-commit
mailing list