Mesa (master): compiler: Add new Vulkan shader stages

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Nov 6 00:40:26 UTC 2020


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

Author: Caio Marcelo de Oliveira Filho <caio.oliveira at intel.com>
Date:   Wed Feb 19 10:14:10 2020 -0800

compiler: Add new Vulkan shader stages

This particular ordering makes them conveniently match
VkShaderStageFlagBits, which is a property we already take advantage
of in the previous shader stages.

Abbreviations are based on the ones used in glslangValidator.

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479>

---

 src/compiler/shader_enums.c                      | 24 ++++++++++++++++++++++++
 src/compiler/shader_enums.h                      | 18 +++++++++++++++++-
 src/gallium/drivers/freedreno/a6xx/fd6_program.c |  9 +++++++++
 src/mesa/main/shaderobj.h                        | 15 +++++----------
 4 files changed, 55 insertions(+), 11 deletions(-)

diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c
index 0e28c5585c4..ccea8692833 100644
--- a/src/compiler/shader_enums.c
+++ b/src/compiler/shader_enums.c
@@ -43,6 +43,14 @@ gl_shader_stage_name(gl_shader_stage stage)
       ENUM(MESA_SHADER_GEOMETRY),
       ENUM(MESA_SHADER_FRAGMENT),
       ENUM(MESA_SHADER_COMPUTE),
+      ENUM(MESA_SHADER_TASK),
+      ENUM(MESA_SHADER_MESH),
+      ENUM(MESA_SHADER_RAYGEN),
+      ENUM(MESA_SHADER_ANY_HIT),
+      ENUM(MESA_SHADER_CLOSEST_HIT),
+      ENUM(MESA_SHADER_MISS),
+      ENUM(MESA_SHADER_INTERSECTION),
+      ENUM(MESA_SHADER_CALLABLE),
       ENUM(MESA_SHADER_KERNEL),
    };
    STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES);
@@ -64,6 +72,14 @@ _mesa_shader_stage_to_string(unsigned stage)
    case MESA_SHADER_KERNEL:   return "kernel";
    case MESA_SHADER_TESS_CTRL: return "tessellation control";
    case MESA_SHADER_TESS_EVAL: return "tessellation evaluation";
+   case MESA_SHADER_TASK:         return "task";
+   case MESA_SHADER_MESH:         return "mesh";
+   case MESA_SHADER_RAYGEN:       return "raygen";
+   case MESA_SHADER_ANY_HIT:      return "any hit";
+   case MESA_SHADER_CLOSEST_HIT:  return "closest hit";
+   case MESA_SHADER_MISS:         return "miss";
+   case MESA_SHADER_INTERSECTION: return "intersection";
+   case MESA_SHADER_CALLABLE:     return "callable";
    }
 
    unreachable("Unknown shader stage.");
@@ -84,6 +100,14 @@ _mesa_shader_stage_to_abbrev(unsigned stage)
    case MESA_SHADER_KERNEL:   return "CL";
    case MESA_SHADER_TESS_CTRL: return "TCS";
    case MESA_SHADER_TESS_EVAL: return "TES";
+   case MESA_SHADER_TASK:         return "TASK";
+   case MESA_SHADER_MESH:         return "MESH";
+   case MESA_SHADER_RAYGEN:       return "RGEN";
+   case MESA_SHADER_ANY_HIT:      return "RAHIT";
+   case MESA_SHADER_CLOSEST_HIT:  return "RCHIT";
+   case MESA_SHADER_MISS:         return "RMISS";
+   case MESA_SHADER_INTERSECTION: return "RINT";
+   case MESA_SHADER_CALLABLE:     return "RCALL";
    }
 
    unreachable("Unknown shader stage.");
diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h
index 9a04487e268..ced516ff57f 100644
--- a/src/compiler/shader_enums.h
+++ b/src/compiler/shader_enums.h
@@ -51,8 +51,19 @@ typedef enum
    MESA_SHADER_GEOMETRY = 3,
    MESA_SHADER_FRAGMENT = 4,
    MESA_SHADER_COMPUTE = 5,
+
+   /* Vulkan-only stages. */
+   MESA_SHADER_TASK         = 6,
+   MESA_SHADER_MESH         = 7,
+   MESA_SHADER_RAYGEN       = 8,
+   MESA_SHADER_ANY_HIT      = 9,
+   MESA_SHADER_CLOSEST_HIT  = 10,
+   MESA_SHADER_MISS         = 11,
+   MESA_SHADER_INTERSECTION = 12,
+   MESA_SHADER_CALLABLE     = 13,
+
    /* must be last so it doesn't affect the GL pipeline */
-   MESA_SHADER_KERNEL = 6,
+   MESA_SHADER_KERNEL = 14,
 } gl_shader_stage;
 
 static inline bool
@@ -88,6 +99,11 @@ const char *_mesa_shader_stage_to_abbrev(unsigned stage);
  */
 #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
 
+/**
+ * Vulkan stages (not including CL)
+ */
+#define MESA_VULKAN_SHADER_STAGES (MESA_SHADER_CALLABLE + 1)
+
 /**
  * All stages
  */
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 2eff56f918d..64690c99c1b 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -75,6 +75,15 @@ fd6_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 		obj_start = REG_A6XX_SP_CS_OBJ_START_LO;
 		instrlen = REG_A6XX_SP_CS_INSTRLEN;
 		break;
+	case MESA_SHADER_TASK:
+	case MESA_SHADER_MESH:
+	case MESA_SHADER_RAYGEN:
+	case MESA_SHADER_ANY_HIT:
+	case MESA_SHADER_CLOSEST_HIT:
+	case MESA_SHADER_MISS:
+	case MESA_SHADER_INTERSECTION:
+	case MESA_SHADER_CALLABLE:
+		unreachable("Unsupported shader stage");
 	case MESA_SHADER_NONE:
 		unreachable("");
 	}
diff --git a/src/mesa/main/shaderobj.h b/src/mesa/main/shaderobj.h
index 0d512550de4..bb1b300e87c 100644
--- a/src/mesa/main/shaderobj.h
+++ b/src/mesa/main/shaderobj.h
@@ -203,8 +203,9 @@ _mesa_shader_stage_from_subroutine(GLenum subroutine)
       return MESA_SHADER_TESS_CTRL;
    case GL_TESS_EVALUATION_SUBROUTINE:
       return MESA_SHADER_TESS_EVAL;
+   default:
+      unreachable("not reached");
    }
-   unreachable("not reached");
 }
 
 static inline GLenum
@@ -223,13 +224,9 @@ _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
       return GL_TESS_CONTROL_SUBROUTINE;
    case MESA_SHADER_TESS_EVAL:
       return GL_TESS_EVALUATION_SUBROUTINE;
-   case MESA_SHADER_NONE:
-      break;
-   case MESA_SHADER_KERNEL:
+   default:
       unreachable("not reached");
-      break;
    }
-   unreachable("not reached");
 }
 
 static inline GLenum
@@ -248,11 +245,9 @@ _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
       return GL_TESS_CONTROL_SUBROUTINE_UNIFORM;
    case MESA_SHADER_TESS_EVAL:
       return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
-   case MESA_SHADER_NONE:
-   case MESA_SHADER_KERNEL:
-      break;
+   default:
+      unreachable("not reached");
    }
-   unreachable("not reached");
 }
 
 extern bool



More information about the mesa-commit mailing list