Module: Mesa
Branch: master
Commit: 4322cf34c4ce5badb410645b370ab33dbfea1a3c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4322cf34c4ce5badb410645b370ab33dbfea1a3c

Author: Jonathan Marek <[email protected]>
Date:   Thu Dec 12 17:13:55 2019 -0500

turnip: add dirty bit for push constants

Fixes push constants not updating in some cases.

Signed-off-by: Jonathan Marek <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>

---

 src/freedreno/vulkan/tu_cmd_buffer.c | 33 +++++++++++++++++++--------------
 src/freedreno/vulkan/tu_private.h    |  1 +
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c 
b/src/freedreno/vulkan/tu_cmd_buffer.c
index 3af7c13ed09..9d466705469 100644
--- a/src/freedreno/vulkan/tu_cmd_buffer.c
+++ b/src/freedreno/vulkan/tu_cmd_buffer.c
@@ -2090,8 +2090,9 @@ tu_CmdPushConstants(VkCommandBuffer commandBuffer,
                     uint32_t size,
                     const void *pValues)
 {
-   TU_FROM_HANDLE(tu_cmd_buffer, cmd_buffer, commandBuffer);
-   memcpy((void*) cmd_buffer->push_constants + offset, pValues, size);
+   TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
+   memcpy((void*) cmd->push_constants + offset, pValues, size);
+   cmd->state.dirty |= TU_CMD_DIRTY_PUSH_CONSTANTS;
 }
 
 VkResult
@@ -3146,18 +3147,7 @@ tu6_bind_draw_states(struct tu_cmd_buffer *cmd,
    }
 
    if (cmd->state.dirty &
-         (TU_CMD_DIRTY_PIPELINE | TU_CMD_DIRTY_DESCRIPTOR_SETS)) {
-      bool needs_border = false;
-      struct tu_cs_entry vs_tex, fs_tex;
-
-      result = tu6_emit_textures(cmd, MESA_SHADER_VERTEX, &vs_tex, 
&needs_border);
-      if (result != VK_SUCCESS)
-         return result;
-
-      result = tu6_emit_textures(cmd, MESA_SHADER_FRAGMENT, &fs_tex, 
&needs_border);
-      if (result != VK_SUCCESS)
-         return result;
-
+         (TU_CMD_DIRTY_PIPELINE | TU_CMD_DIRTY_DESCRIPTOR_SETS | 
TU_CMD_DIRTY_PUSH_CONSTANTS)) {
       draw_state_groups[draw_state_group_count++] =
          (struct tu_draw_state_group) {
             .id = TU_DRAW_STATE_VS_CONST,
@@ -3170,6 +3160,21 @@ tu6_bind_draw_states(struct tu_cmd_buffer *cmd,
             .enable_mask = 0x6,
             .ib = tu6_emit_consts(cmd, pipeline, descriptors_state, 
MESA_SHADER_FRAGMENT)
          };
+   }
+
+   if (cmd->state.dirty &
+         (TU_CMD_DIRTY_PIPELINE | TU_CMD_DIRTY_DESCRIPTOR_SETS)) {
+      bool needs_border = false;
+      struct tu_cs_entry vs_tex, fs_tex;
+
+      result = tu6_emit_textures(cmd, MESA_SHADER_VERTEX, &vs_tex, 
&needs_border);
+      if (result != VK_SUCCESS)
+         return result;
+
+      result = tu6_emit_textures(cmd, MESA_SHADER_FRAGMENT, &fs_tex, 
&needs_border);
+      if (result != VK_SUCCESS)
+         return result;
+
       draw_state_groups[draw_state_group_count++] =
          (struct tu_draw_state_group) {
             .id = TU_DRAW_STATE_VS_TEX,
diff --git a/src/freedreno/vulkan/tu_private.h 
b/src/freedreno/vulkan/tu_private.h
index 1edc4a24d77..2d9051284e1 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -835,6 +835,7 @@ enum tu_cmd_dirty_bits
    TU_CMD_DIRTY_COMPUTE_PIPELINE = 1 << 1,
    TU_CMD_DIRTY_VERTEX_BUFFERS = 1 << 2,
    TU_CMD_DIRTY_DESCRIPTOR_SETS = 1 << 3,
+   TU_CMD_DIRTY_PUSH_CONSTANTS = 1 << 4,
 
    TU_CMD_DIRTY_DYNAMIC_LINE_WIDTH = 1 << 16,
    TU_CMD_DIRTY_DYNAMIC_STENCIL_COMPARE_MASK = 1 << 17,

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to