nvk: SET_REFERENCE is not legal anymore.

replace with WFI, this is possibly overkill

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35484>
This commit is contained in:
Dave Airlie 2025-06-13 11:19:02 +10:00 committed by Marge Bot
parent 6fa078c0be
commit a2518c817f
2 changed files with 16 additions and 3 deletions

View file

@ -15,6 +15,7 @@
#include "cla1c0.h"
#include "clc0c0.h"
#include "clc5c0.h"
#include "clcbc0.h"
#include "clcdc0.h"
#include "nv_push_cl90c0.h"
#include "nv_push_cl9097.h"
@ -24,6 +25,7 @@
#include "nv_push_clc3c0.h"
#include "nv_push_clc597.h"
#include "nv_push_clc6c0.h"
#include "nv_push_clc86f.h"
VkResult
nvk_push_dispatch_state_init(struct nvk_queue *queue, struct nv_push *p)
@ -529,6 +531,8 @@ nvk_CmdDispatchIndirect(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
VK_FROM_HANDLE(nvk_buffer, buffer, _buffer);
struct nvk_device *dev = nvk_cmd_buffer_device(cmd);
const struct nvk_physical_device *pdev = nvk_device_physical(dev);
uint64_t dispatch_addr = vk_buffer_address(&buffer->vk, offset);
@ -561,7 +565,11 @@ nvk_CmdDispatchIndirect(VkCommandBuffer commandBuffer,
} else {
p = nvk_cmd_buffer_push(cmd, 5);
/* Stall the command streamer */
__push_immd(p, SUBC_NV9097, NV906F_SET_REFERENCE, 0);
if (pdev->info.cls_compute >= HOPPER_COMPUTE_A) {
P_IMMD(p, NVC86F, WFI, 0);
} else {
__push_immd(p, SUBC_NV9097, NV906F_SET_REFERENCE, 0);
}
P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_DISPATCH_INDIRECT));
nv_push_update_count(p, sizeof(VkDispatchIndirectCommand) / 4);

View file

@ -13,12 +13,14 @@
#include "nir_builder.h"
#include "vk_pipeline.h"
#include "clcb97.h"
#include "nv_push.h"
#include "nv_push_cl9097.h"
#include "nv_push_cl906f.h"
#include "nv_push_cla0c0.h"
#include "nv_push_clb1c0.h"
#include "nv_push_clc6c0.h"
#include "nv_push_clc86f.h"
struct nvk_indirect_commands_layout {
struct vk_object_base base;
@ -1035,7 +1037,7 @@ nvk_CmdExecuteGeneratedCommandsEXT(VkCommandBuffer commandBuffer,
nvk_cmd_flush_process_state(cmd, info);
nvk_cmd_process_cmds(cmd, info, &cmd->state);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 5);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 6);
P_IMMD(p, NVA0C0, INVALIDATE_SHADER_CACHES, {
.data = DATA_TRUE,
.constant = CONSTANT_TRUE,
@ -1043,7 +1045,10 @@ nvk_CmdExecuteGeneratedCommandsEXT(VkCommandBuffer commandBuffer,
});
if (pdev->info.cls_eng3d >= MAXWELL_COMPUTE_B)
P_IMMD(p, NVB1C0, INVALIDATE_SKED_CACHES, 0);
__push_immd(p, SUBC_NV9097, NV906F_SET_REFERENCE, 0);
if (pdev->info.cls_eng3d >= HOPPER_A)
P_IMMD(p, NVC86F, WFI, 0);
else
__push_immd(p, SUBC_NV9097, NV906F_SET_REFERENCE, 0);
}
if (layout->stages & VK_SHADER_STAGE_COMPUTE_BIT) {