Mesa (master): lavapipe: add some asserts for blit region extents

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Apr 7 19:55:07 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Fri Apr  2 11:05:09 2021 -0400

lavapipe: add some asserts for blit region extents

this enforces spec for 3d vs array texture blits, more to come

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10005>

---

 src/gallium/frontends/lavapipe/lvp_execute.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/gallium/frontends/lavapipe/lvp_execute.c b/src/gallium/frontends/lavapipe/lvp_execute.c
index 77922707363..0a39a9d596f 100644
--- a/src/gallium/frontends/lavapipe/lvp_execute.c
+++ b/src/gallium/frontends/lavapipe/lvp_execute.c
@@ -133,6 +133,24 @@ struct rendering_state {
    uint32_t so_offsets[PIPE_MAX_SO_BUFFERS];
 };
 
+ALWAYS_INLINE static void
+assert_subresource_layers(const struct pipe_resource *pres, const VkImageSubresourceLayers *layers, const VkOffset3D *offsets)
+{
+#ifndef NDEBUG
+   if (pres->target == PIPE_TEXTURE_3D) {
+      assert(layers->baseArrayLayer == 0);
+      assert(layers->layerCount == 1);
+      assert(offsets[0].z <= pres->depth0);
+      assert(offsets[1].z <= pres->depth0);
+   } else {
+      assert(layers->baseArrayLayer < pres->array_size);
+      assert(layers->baseArrayLayer + layers->layerCount <= pres->array_size);
+      assert(offsets[0].z == 0);
+      assert(offsets[1].z == 1);
+   }
+#endif
+}
+
 static void emit_compute_state(struct rendering_state *state)
 {
    if (state->iv_dirty[PIPE_SHADER_COMPUTE]) {
@@ -2064,6 +2082,8 @@ static void handle_blit_image(struct lvp_cmd_buffer_entry *cmd,
          info.src.box.height = srcY0 - srcY1;
       }
 
+      assert_subresource_layers(info.src.resource, &blitcmd->regions[i].srcSubresource, blitcmd->regions[i].srcOffsets);
+      assert_subresource_layers(info.dst.resource, &blitcmd->regions[i].dstSubresource, blitcmd->regions[i].dstOffsets);
       if (blitcmd->src->bo->target == PIPE_TEXTURE_3D) {
          if (dstZ0 < dstZ1) {
             info.dst.box.z = dstZ0;



More information about the mesa-commit mailing list