Signed-off-by: Kenneth Graunke <kenn...@whitecape.org>
---
 src/compiler/spirv/spirv_to_nir.c | 28 ++++++++++++++++++++++------
 1 file changed, 22 insertions(+), 6 deletions(-)

One totally bogus thing here: we set CCW backwards.  In all three driver
backends (i965, nvc0, radeonsi), we invert CCW because it doesn't seem to
match the HW.  That means that Vulkan CCW and HW CCW match, and it's just
OpenGL that's backwards.  We should figure out what's actually going on
here and decide which meaning we want to go with.

diff --git a/src/compiler/spirv/spirv_to_nir.c 
b/src/compiler/spirv/spirv_to_nir.c
index 41da0e85c9d..8f19afa77ee 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -2655,8 +2655,12 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct 
vtn_value *entry_point,
       break; /* Nothing to do with this */
 
    case SpvExecutionModeOutputVertices:
-      assert(b->shader->stage == MESA_SHADER_GEOMETRY);
-      b->shader->info->gs.vertices_out = mode->literals[0];
+      if (b->shader->stage == MESA_SHADER_TESS_CTRL) {
+         b->shader->info->tcs.vertices_out = mode->literals[0];
+      } else {
+         assert(b->shader->stage == MESA_SHADER_GEOMETRY);
+         b->shader->info->gs.vertices_out = mode->literals[0];
+      }
       break;
 
    case SpvExecutionModeInputPoints:
@@ -2666,11 +2670,13 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct 
vtn_value *entry_point,
    case SpvExecutionModeInputTrianglesAdjacency:
    case SpvExecutionModeQuads:
    case SpvExecutionModeIsolines:
-      if (b->shader->stage == MESA_SHADER_GEOMETRY) {
+      if (b->shader->stage == MESA_SHADER_TESS_EVAL) {
+         b->shader->info->tes.primitive_mode =
+            gl_primitive_from_spv_execution_mode(mode->exec_mode);
+      } else {
+         assert(b->shader->stage == MESA_SHADER_GEOMETRY);
          b->shader->info->gs.vertices_in =
             vertices_in_from_spv_execution_mode(mode->exec_mode);
-      } else {
-         assert(!"Tesselation shaders not yet supported");
       }
       break;
 
@@ -2683,12 +2689,22 @@ vtn_handle_execution_mode(struct vtn_builder *b, struct 
vtn_value *entry_point,
       break;
 
    case SpvExecutionModeSpacingEqual:
+      b->shader->info->tes.spacing = TESS_SPACING_EQUAL;
+      break;
    case SpvExecutionModeSpacingFractionalEven:
+      b->shader->info->tes.spacing = TESS_SPACING_FRACTIONAL_EVEN;
+      break;
    case SpvExecutionModeSpacingFractionalOdd:
+      b->shader->info->tes.spacing = TESS_SPACING_FRACTIONAL_ODD;
+      break;
    case SpvExecutionModeVertexOrderCw:
+      b->shader->info->tes.ccw = true;
+      break;
    case SpvExecutionModeVertexOrderCcw:
+      b->shader->info->tes.ccw = false;
+      break;
    case SpvExecutionModePointMode:
-      assert(!"TODO: Add tessellation metadata");
+      b->shader->info->tes.point_mode = true;
       break;
 
    case SpvExecutionModePixelCenterInteger:
-- 
2.11.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to