Skip to content

Commit 0ca4177

Browse files
committed
[HACK, DO NOT USE] turnip: skip all tessellation draws
These cause GPU faults and were disabled in "upstream" by hiding the features. DXVK requires them, so let's just skip tess draws instead
1 parent b0c6ed4 commit 0ca4177

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

src/freedreno/vulkan/tu_cmd_buffer.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8542,6 +8542,10 @@ tu_CmdDraw(VkCommandBuffer commandBuffer,
85428542
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
85438543
struct tu_cs *cs = &cmd->draw_cs;
85448544

8545+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8546+
if (has_tess)
8547+
return;
8548+
85458549
tu6_emit_vs_params(cmd, 0, firstVertex, firstInstance);
85468550

85478551
tu6_draw_common<CHIP>(cmd, cs, false, vertexCount);
@@ -8571,6 +8575,8 @@ tu_CmdDrawMultiEXT(VkCommandBuffer commandBuffer,
85718575
return;
85728576

85738577
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8578+
if (has_tess)
8579+
return;
85748580

85758581
uint32_t max_vertex_count = 0;
85768582
if (has_tess) {
@@ -8616,6 +8622,10 @@ tu_CmdDrawIndexed(VkCommandBuffer commandBuffer,
86168622
VK_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
86178623
struct tu_cs *cs = &cmd->draw_cs;
86188624

8625+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8626+
if (has_tess)
8627+
return;
8628+
86198629
tu6_emit_vs_params(cmd, 0, vertexOffset, firstInstance);
86208630

86218631
tu6_draw_common<CHIP>(cmd, cs, true, indexCount);
@@ -8649,6 +8659,8 @@ tu_CmdDrawMultiIndexedEXT(VkCommandBuffer commandBuffer,
86498659
return;
86508660

86518661
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8662+
if (has_tess)
8663+
return;
86528664

86538665
uint32_t max_index_count = 0;
86548666
if (has_tess) {
@@ -8712,6 +8724,10 @@ tu_CmdDrawIndirect(VkCommandBuffer commandBuffer,
87128724
VK_FROM_HANDLE(tu_buffer, buf, _buffer);
87138725
struct tu_cs *cs = &cmd->draw_cs;
87148726

8727+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8728+
if (has_tess)
8729+
return;
8730+
87158731
tu6_emit_empty_vs_params<CHIP>(cmd);
87168732

87178733
if (cmd->device->physical_device->info->props.indirect_draw_wfm_quirk)
@@ -8743,6 +8759,10 @@ tu_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
87438759
VK_FROM_HANDLE(tu_buffer, buf, _buffer);
87448760
struct tu_cs *cs = &cmd->draw_cs;
87458761

8762+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8763+
if (has_tess)
8764+
return;
8765+
87468766
tu6_emit_empty_vs_params<CHIP>(cmd);
87478767

87488768
if (cmd->device->physical_device->info->props.indirect_draw_wfm_quirk)
@@ -8779,6 +8799,10 @@ tu_CmdDrawIndirectCount(VkCommandBuffer commandBuffer,
87798799
VK_FROM_HANDLE(tu_buffer, count_buf, countBuffer);
87808800
struct tu_cs *cs = &cmd->draw_cs;
87818801

8802+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8803+
if (has_tess)
8804+
return;
8805+
87828806
tu6_emit_empty_vs_params<CHIP>(cmd);
87838807

87848808
/* It turns out that the firmware we have for a650 only partially fixed the
@@ -8818,6 +8842,10 @@ tu_CmdDrawIndexedIndirectCount(VkCommandBuffer commandBuffer,
88188842
VK_FROM_HANDLE(tu_buffer, count_buf, countBuffer);
88198843
struct tu_cs *cs = &cmd->draw_cs;
88208844

8845+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8846+
if (has_tess)
8847+
return;
8848+
88218849
tu6_emit_empty_vs_params<CHIP>(cmd);
88228850

88238851
draw_wfm(cmd);
@@ -8853,6 +8881,10 @@ tu_CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer,
88538881
VK_FROM_HANDLE(tu_buffer, buf, _counterBuffer);
88548882
struct tu_cs *cs = &cmd->draw_cs;
88558883

8884+
bool has_tess = cmd->state.shaders[MESA_SHADER_TESS_CTRL]->variant;
8885+
if (has_tess)
8886+
return;
8887+
88568888
/* All known firmware versions do not wait for WFI's with CP_DRAW_AUTO.
88578889
* Plus, for the common case where the counter buffer is written by
88588890
* vkCmdEndTransformFeedback, we need to wait for the CP_WAIT_MEM_WRITES to

0 commit comments

Comments
 (0)