nvk: Implement VK_EXT_shader_image_atomic_int64
The compiler work is done but we still need to advertise formats and deal with clears. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9647 Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26246>
This commit is contained in:
committed by
Marge Bot
parent
0ad77cbf98
commit
1d10de539c
+1
-1
@@ -601,7 +601,7 @@ Khronos extensions that are not part of any Vulkan version:
|
|||||||
VK_EXT_sample_locations DONE (anv, hasvk, nvk, radv/gfx9-, tu/a650)
|
VK_EXT_sample_locations DONE (anv, hasvk, nvk, radv/gfx9-, tu/a650)
|
||||||
VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, radv)
|
VK_EXT_shader_atomic_float DONE (anv, hasvk, lvp, radv)
|
||||||
VK_EXT_shader_atomic_float2 DONE (anv/gen9+, lvp, radv)
|
VK_EXT_shader_atomic_float2 DONE (anv/gen9+, lvp, radv)
|
||||||
VK_EXT_shader_image_atomic_int64 DONE (radv)
|
VK_EXT_shader_image_atomic_int64 DONE (nvk, radv)
|
||||||
VK_EXT_shader_object DONE (lvp)
|
VK_EXT_shader_object DONE (lvp)
|
||||||
VK_EXT_shader_stencil_export DONE (anv/gen9+, lvp, radv, tu, vn)
|
VK_EXT_shader_stencil_export DONE (anv/gen9+, lvp, radv, tu, vn)
|
||||||
VK_EXT_shader_subgroup_ballot DONE (anv, dzn, hasvk, lvp, nvk, radv, vn)
|
VK_EXT_shader_subgroup_ballot DONE (anv, dzn, hasvk, lvp, nvk, radv, vn)
|
||||||
|
|||||||
@@ -298,6 +298,9 @@ nvk_CmdClearColorImage(VkCommandBuffer commandBuffer,
|
|||||||
};
|
};
|
||||||
|
|
||||||
VkFormat vk_format = image->vk.format;
|
VkFormat vk_format = image->vk.format;
|
||||||
|
if (vk_format == VK_FORMAT_R64_UINT || vk_format == VK_FORMAT_R64_SINT)
|
||||||
|
vk_format = VK_FORMAT_R32G32_UINT;
|
||||||
|
|
||||||
enum pipe_format p_format = vk_format_to_pipe_format(vk_format);
|
enum pipe_format p_format = vk_format_to_pipe_format(vk_format);
|
||||||
assert(p_format != PIPE_FORMAT_NONE);
|
assert(p_format != PIPE_FORMAT_NONE);
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,8 @@ nvk_get_image_plane_format_features(struct nvk_physical_device *pdev,
|
|||||||
features |= VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_format == PIPE_FORMAT_R32_UINT || p_format == PIPE_FORMAT_R32_SINT)
|
if (p_format == PIPE_FORMAT_R32_UINT || p_format == PIPE_FORMAT_R32_SINT ||
|
||||||
|
p_format == PIPE_FORMAT_R64_UINT || p_format == PIPE_FORMAT_R64_SINT)
|
||||||
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT;
|
||||||
|
|
||||||
if (features != 0) {
|
if (features != 0) {
|
||||||
|
|||||||
@@ -168,6 +168,8 @@ nvk_get_device_extensions(const struct nv_device_info *info,
|
|||||||
.EXT_sample_locations = info->cls_eng3d >= MAXWELL_B,
|
.EXT_sample_locations = info->cls_eng3d >= MAXWELL_B,
|
||||||
.EXT_sampler_filter_minmax = info->cls_eng3d >= MAXWELL_B,
|
.EXT_sampler_filter_minmax = info->cls_eng3d >= MAXWELL_B,
|
||||||
.EXT_separate_stencil_usage = true,
|
.EXT_separate_stencil_usage = true,
|
||||||
|
.EXT_shader_image_atomic_int64 = info->cls_eng3d >= MAXWELL_A &&
|
||||||
|
nvk_use_nak(info),
|
||||||
.EXT_shader_demote_to_helper_invocation = true,
|
.EXT_shader_demote_to_helper_invocation = true,
|
||||||
.EXT_shader_subgroup_ballot = true,
|
.EXT_shader_subgroup_ballot = true,
|
||||||
.EXT_shader_subgroup_vote = true,
|
.EXT_shader_subgroup_vote = true,
|
||||||
@@ -445,6 +447,12 @@ nvk_get_device_features(const struct nv_device_info *info,
|
|||||||
.robustImageAccess2 = true,
|
.robustImageAccess2 = true,
|
||||||
.nullDescriptor = true,
|
.nullDescriptor = true,
|
||||||
|
|
||||||
|
/* VK_EXT_shader_image_atomic_int64 */
|
||||||
|
.shaderImageInt64Atomics = info->cls_eng3d >= MAXWELL_A &&
|
||||||
|
nvk_use_nak(info),
|
||||||
|
.sparseImageInt64Atomics = info->cls_eng3d >= MAXWELL_A &&
|
||||||
|
nvk_use_nak(info),
|
||||||
|
|
||||||
/* VK_EXT_transform_feedback */
|
/* VK_EXT_transform_feedback */
|
||||||
.transformFeedback = true,
|
.transformFeedback = true,
|
||||||
.geometryStreams = true,
|
.geometryStreams = true,
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ nvk_physical_device_spirv_options(const struct nvk_physical_device *pdev,
|
|||||||
.draw_parameters = true,
|
.draw_parameters = true,
|
||||||
.fragment_barycentric = true,
|
.fragment_barycentric = true,
|
||||||
.geometry_streams = true,
|
.geometry_streams = true,
|
||||||
|
.image_atomic_int64 = true,
|
||||||
.image_read_without_format = true,
|
.image_read_without_format = true,
|
||||||
.image_write_without_format = true,
|
.image_write_without_format = true,
|
||||||
.int8 = true,
|
.int8 = true,
|
||||||
|
|||||||
Reference in New Issue
Block a user