nvk: Disable indirect draw/dispatch and query copy MMEs for now

These all rely on mme_tu104_read_fifoed() which isn't available before
Turing.  They're also really register-expensive and we can't compile
them without paring things down a bit.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
Faith Ekstrand 2023-01-30 20:12:06 -06:00 committed by Marge Bot
parent 731cfb86e7
commit dabc4f6bcc
3 changed files with 25 additions and 0 deletions

View file

@ -278,6 +278,9 @@ mme_store_global_vec3(struct mme_builder *b,
void
nvk_mme_dispatch_indirect(struct nvk_device *dev, struct mme_builder *b)
{
if (dev->ctx->eng3d.cls < TURING_A)
return;
struct mme_value local_size = mme_load(b);
struct mme_value64 dispatch_addr = mme_load_addr64(b);
struct mme_value64 root_desc_addr = mme_load_addr64(b);
@ -312,6 +315,9 @@ nvk_CmdDispatchIndirect(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_buffer, buffer, _buffer);
struct nvk_descriptor_state *desc = &cmd->state.cs.descriptors;
/* TODO: Indirect dispatch pre-Turing */
assert(nvk_cmd_buffer_device(cmd)->ctx->eng3d.cls >= TURING_A);
desc->root.cs.base_group[0] = 0;
desc->root.cs.base_group[1] = 0;
desc->root.cs.base_group[2] = 0;

View file

@ -1674,6 +1674,9 @@ nvk_CmdDrawIndexed(VkCommandBuffer commandBuffer,
void
nvk_mme_draw_indirect(struct nvk_device *dev, struct mme_builder *b)
{
if (dev->ctx->eng3d.cls < TURING_A)
return;
struct mme_value begin = mme_load(b);
struct mme_value64 draw_addr = mme_load_addr64(b);
struct mme_value draw_count = mme_load(b);
@ -1702,6 +1705,9 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
/* TODO: Indirect draw pre-Turing */
assert(nvk_cmd_buffer_3d_cls(cmd) >= TURING_A);
nvk_flush_gfx_state(cmd);
uint32_t begin;
@ -1726,6 +1732,9 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
void
nvk_mme_draw_indexed_indirect(struct nvk_device *dev, struct mme_builder *b)
{
if (dev->ctx->eng3d.cls < TURING_A)
return;
struct mme_value begin = mme_load(b);
struct mme_value64 draw_addr = mme_load_addr64(b);
struct mme_value draw_count = mme_load(b);
@ -1754,6 +1763,9 @@ nvk_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
/* TODO: Indirect draw pre-Turing */
assert(nvk_cmd_buffer_3d_cls(cmd) >= TURING_A);
nvk_flush_gfx_state(cmd);
uint32_t begin;

View file

@ -9,6 +9,7 @@
#include "util/os_time.h"
#include "nouveau_bo.h"
#include "nouveau_context.h"
#include "nvk_cl906f.h"
#include "nvk_cl9097.h"
@ -535,6 +536,9 @@ nvk_GetQueryPoolResults(VkDevice device,
void
nvk_mme_copy_queries(struct nvk_device *dev, struct mme_builder *b)
{
if (dev->ctx->eng3d.cls < TURING_A)
return;
struct mme_value64 dst_addr = mme_load_addr64(b);
struct mme_value64 dst_stride = mme_load_addr64(b);
struct mme_value64 avail_addr = mme_load_addr64(b);
@ -638,6 +642,9 @@ nvk_CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_query_pool, pool, queryPool);
VK_FROM_HANDLE(nvk_buffer, dst_buffer, dstBuffer);
/* TODO: vkCmdCopyQueryPoolResults() with a compute shader */
assert(nvk_cmd_buffer_device(cmd)->ctx->eng3d.cls >= TURING_A);
nvk_cmd_buffer_ref_bo(cmd, pool->bo);
if (flags & VK_QUERY_RESULT_WAIT_BIT) {