Mesa (vulkan): anv: Remove default scissor and viewport concepts

Nanley Chery nchery at kemper.freedesktop.org
Thu Apr 14 01:04:20 UTC 2016


Module: Mesa
Branch: vulkan
Commit: 79fbec30fc16399ede9385ef52cb62cefbb388f4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=79fbec30fc16399ede9385ef52cb62cefbb388f4

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Wed Mar 30 17:13:01 2016 -0700

anv: Remove default scissor and viewport concepts

Users should never provide a scissor or viewport count of 0 because
they are required to set such state in a graphics pipeline. This
behavior was previously only used in Meta, which actually just
disables those hardware operations at pipeline creation time.

Kristian noticed that the current assignment of viewport count
reduces the number of viewport uploads, so it is not removed.

Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
Reviewed-by: Kristian Høgsberg Kristensen <kristian.h.kristensen at intel.com>

---

 src/intel/vulkan/anv_meta_clear.c   |  2 +-
 src/intel/vulkan/anv_meta_resolve.c |  3 ---
 src/intel/vulkan/gen7_cmd_buffer.c  | 26 ++++----------------------
 src/intel/vulkan/gen8_cmd_buffer.c  | 27 ++++-----------------------
 4 files changed, 9 insertions(+), 49 deletions(-)

diff --git a/src/intel/vulkan/anv_meta_clear.c b/src/intel/vulkan/anv_meta_clear.c
index c5c7d56..eb4e569 100644
--- a/src/intel/vulkan/anv_meta_clear.c
+++ b/src/intel/vulkan/anv_meta_clear.c
@@ -47,8 +47,8 @@ meta_clear_begin(struct anv_meta_saved_state *saved_state,
                  (1 << VK_DYNAMIC_STATE_STENCIL_REFERENCE) |
                  (1 << VK_DYNAMIC_STATE_STENCIL_WRITE_MASK));
 
+   /* Avoid uploading more viewport states than necessary */
    cmd_buffer->state.dynamic.viewport.count = 0;
-   cmd_buffer->state.dynamic.scissor.count = 0;
 }
 
 static void
diff --git a/src/intel/vulkan/anv_meta_resolve.c b/src/intel/vulkan/anv_meta_resolve.c
index f83bb6b..7d2a75b 100644
--- a/src/intel/vulkan/anv_meta_resolve.c
+++ b/src/intel/vulkan/anv_meta_resolve.c
@@ -42,9 +42,6 @@ meta_resolve_save(struct anv_meta_saved_state *saved_state,
                   struct anv_cmd_buffer *cmd_buffer)
 {
    anv_meta_save(saved_state, cmd_buffer, 0);
-
-   cmd_buffer->state.dynamic.viewport.count = 0;
-   cmd_buffer->state.dynamic.scissor.count = 0;
 }
 
 static void
diff --git a/src/intel/vulkan/gen7_cmd_buffer.c b/src/intel/vulkan/gen7_cmd_buffer.c
index b5d21ef..5130a40 100644
--- a/src/intel/vulkan/gen7_cmd_buffer.c
+++ b/src/intel/vulkan/gen7_cmd_buffer.c
@@ -133,10 +133,11 @@ clamp_int64(int64_t x, int64_t min, int64_t max)
 }
 
 #if GEN_GEN == 7 && !GEN_IS_HASWELL
-static void
-emit_scissor_state(struct anv_cmd_buffer *cmd_buffer,
-                   uint32_t count, const VkRect2D *scissors)
+void
+gen7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer)
 {
+   uint32_t count = cmd_buffer->state.dynamic.scissor.count;
+   const VkRect2D *scissors =  cmd_buffer->state.dynamic.scissor.scissors;
    struct anv_state scissor_state =
       anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 8, 32);
 
@@ -178,25 +179,6 @@ emit_scissor_state(struct anv_cmd_buffer *cmd_buffer,
    if (!cmd_buffer->device->info.has_llc)
       anv_state_clflush(scissor_state);
 }
-
-void
-gen7_cmd_buffer_emit_scissor(struct anv_cmd_buffer *cmd_buffer)
-{
-   if (cmd_buffer->state.dynamic.scissor.count > 0) {
-      emit_scissor_state(cmd_buffer, cmd_buffer->state.dynamic.scissor.count,
-                         cmd_buffer->state.dynamic.scissor.scissors);
-   } else {
-      /* Emit a default scissor based on the currently bound framebuffer */
-      emit_scissor_state(cmd_buffer, 1,
-                         &(VkRect2D) {
-                            .offset = { .x = 0, .y = 0, },
-                            .extent = {
-                               .width = cmd_buffer->state.framebuffer->width,
-                               .height = cmd_buffer->state.framebuffer->height,
-                            },
-                         });
-   }
-}
 #endif
 
 static const uint32_t vk_to_gen_index_type[] = {
diff --git a/src/intel/vulkan/gen8_cmd_buffer.c b/src/intel/vulkan/gen8_cmd_buffer.c
index 5b6afb3..3956a58 100644
--- a/src/intel/vulkan/gen8_cmd_buffer.c
+++ b/src/intel/vulkan/gen8_cmd_buffer.c
@@ -33,10 +33,11 @@
 #include "genxml/genX_pack.h"
 
 #if GEN_GEN == 8
-static void
-emit_viewport_state(struct anv_cmd_buffer *cmd_buffer,
-                    uint32_t count, const VkViewport *viewports)
+void
+gen8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer)
 {
+   uint32_t count = cmd_buffer->state.dynamic.viewport.count;
+   const VkViewport *viewports = cmd_buffer->state.dynamic.viewport.viewports;
    struct anv_state sf_clip_state =
       anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, count * 64, 64);
    struct anv_state cc_state =
@@ -86,26 +87,6 @@ emit_viewport_state(struct anv_cmd_buffer *cmd_buffer,
                   GENX(3DSTATE_VIEWPORT_STATE_POINTERS_SF_CLIP),
                   .SFClipViewportPointer = sf_clip_state.offset);
 }
-
-void
-gen8_cmd_buffer_emit_viewport(struct anv_cmd_buffer *cmd_buffer)
-{
-   if (cmd_buffer->state.dynamic.viewport.count > 0) {
-      emit_viewport_state(cmd_buffer, cmd_buffer->state.dynamic.viewport.count,
-                          cmd_buffer->state.dynamic.viewport.viewports);
-   } else {
-      /* If viewport count is 0, this is taken to mean "use the default" */
-      emit_viewport_state(cmd_buffer, 1,
-                          &(VkViewport) {
-                             .x = 0.0f,
-                             .y = 0.0f,
-                             .width = cmd_buffer->state.framebuffer->width,
-                             .height = cmd_buffer->state.framebuffer->height,
-                             .minDepth = 0.0f,
-                             .maxDepth = 1.0f,
-                          });
-   }
-}
 #endif
 
 #define emit_lri(batch, reg, imm)                       \




More information about the mesa-commit mailing list