Module: Mesa
Branch: main
Commit: c7135e94cb3fc73f7a925173ff3c0215196dae76
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7135e94cb3fc73f7a925173ff3c0215196dae76

Author: George Ouzounoudis <[email protected]>
Date:   Mon Aug 21 20:23:19 2023 +0300

nvk: Support extendedDynamicState3SampleMask

This is needed for EXT_shader_object. Move to dynamic state.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24872>

---

 src/nouveau/vulkan/nvk_cmd_draw.c          | 9 +++++++++
 src/nouveau/vulkan/nvk_graphics_pipeline.c | 6 ------
 src/nouveau/vulkan/nvk_physical_device.c   | 2 +-
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/nouveau/vulkan/nvk_cmd_draw.c 
b/src/nouveau/vulkan/nvk_cmd_draw.c
index 78ce274c136..ce15fa824f6 100644
--- a/src/nouveau/vulkan/nvk_cmd_draw.c
+++ b/src/nouveau/vulkan/nvk_cmd_draw.c
@@ -1385,6 +1385,15 @@ nvk_flush_ms_state(struct nvk_cmd_buffer *cmd)
          }
       }
    }
+
+   if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_MS_SAMPLE_MASK)) {
+      struct nv_push *p = nvk_cmd_buffer_push(cmd, 5);
+      P_MTHD(p, NV9097, SET_SAMPLE_MASK_X0_Y0);
+      P_NV9097_SET_SAMPLE_MASK_X0_Y0(p, dyn->ms.sample_mask & 0xffff);
+      P_NV9097_SET_SAMPLE_MASK_X1_Y0(p, dyn->ms.sample_mask & 0xffff);
+      P_NV9097_SET_SAMPLE_MASK_X0_Y1(p, dyn->ms.sample_mask & 0xffff);
+      P_NV9097_SET_SAMPLE_MASK_X1_Y1(p, dyn->ms.sample_mask & 0xffff);
+   }
 }
 
 static uint32_t
diff --git a/src/nouveau/vulkan/nvk_graphics_pipeline.c 
b/src/nouveau/vulkan/nvk_graphics_pipeline.c
index 577fc2dca02..b08ee4a1a3d 100644
--- a/src/nouveau/vulkan/nvk_graphics_pipeline.c
+++ b/src/nouveau/vulkan/nvk_graphics_pipeline.c
@@ -75,12 +75,6 @@ emit_pipeline_ms_state(struct nv_push *p,
       .alpha_to_one        = ms->alpha_to_one_enable,
    });
 
-   P_MTHD(p, NV9097, SET_SAMPLE_MASK_X0_Y0);
-   P_NV9097_SET_SAMPLE_MASK_X0_Y0(p, ms->sample_mask & 0xffff);
-   P_NV9097_SET_SAMPLE_MASK_X1_Y0(p, ms->sample_mask & 0xffff);
-   P_NV9097_SET_SAMPLE_MASK_X0_Y1(p, ms->sample_mask & 0xffff);
-   P_NV9097_SET_SAMPLE_MASK_X1_Y1(p, ms->sample_mask & 0xffff);
-
    const float min_sample_shading = force_max_samples ? 1 :
       (ms->sample_shading_enable ? CLAMP(ms->min_sample_shading, 0, 1) : 0);
    uint32_t min_samples = ceilf(ms->rasterization_samples * 
min_sample_shading);
diff --git a/src/nouveau/vulkan/nvk_physical_device.c 
b/src/nouveau/vulkan/nvk_physical_device.c
index 4e0d81ef06b..adc35d6a1bc 100644
--- a/src/nouveau/vulkan/nvk_physical_device.c
+++ b/src/nouveau/vulkan/nvk_physical_device.c
@@ -393,7 +393,7 @@ nvk_get_device_features(const struct nv_device_info *info,
       .extendedDynamicState3DepthClampEnable = true,
       .extendedDynamicState3PolygonMode = true,
       .extendedDynamicState3RasterizationSamples = false,
-      .extendedDynamicState3SampleMask = false,
+      .extendedDynamicState3SampleMask = true,
       .extendedDynamicState3AlphaToCoverageEnable = false,
       .extendedDynamicState3AlphaToOneEnable = false,
       .extendedDynamicState3LogicOpEnable = true,

Reply via email to