swr: Fix build with GCC 10.
[mesa.git] / src / gallium / drivers / swr / swr_shader.h
index 266573f7eaff1d0b2b6a6eec7aac9131dc606afc..cabe915f312eb57e2b271c0551707c376bcef0fd 100644 (file)
 
 struct swr_vertex_shader;
 struct swr_fragment_shader;
+struct swr_geometry_shader;
+struct swr_tess_control_shader;
+struct swr_tess_evaluation_shader;
+
 struct swr_jit_fs_key;
 struct swr_jit_vs_key;
+struct swr_jit_gs_key;
+struct swr_jit_tcs_key;
+struct swr_jit_tes_key;
+
+using PFN_TCS_FUNC = PFN_HS_FUNC;
+using PFN_TES_FUNC = PFN_DS_FUNC;
+
+unsigned swr_so_adjust_attrib(unsigned in_attrib,
+                              swr_vertex_shader *swr_vs);
 
 PFN_VERTEX_FUNC
 swr_compile_vs(struct swr_context *ctx, swr_jit_vs_key &key);
@@ -34,6 +47,15 @@ swr_compile_vs(struct swr_context *ctx, swr_jit_vs_key &key);
 PFN_PIXEL_KERNEL
 swr_compile_fs(struct swr_context *ctx, swr_jit_fs_key &key);
 
+PFN_GS_FUNC
+swr_compile_gs(struct swr_context *ctx, swr_jit_gs_key &key);
+
+PFN_TCS_FUNC
+swr_compile_tcs(struct swr_context *ctx, swr_jit_tcs_key &key);
+
+PFN_TES_FUNC
+swr_compile_tes(struct swr_context *ctx, swr_jit_tes_key &key);
+
 void swr_generate_fs_key(struct swr_jit_fs_key &key,
                          struct swr_context *ctx,
                          swr_fragment_shader *swr_fs);
@@ -45,6 +67,18 @@ void swr_generate_vs_key(struct swr_jit_vs_key &key,
 void swr_generate_fetch_key(struct swr_jit_fetch_key &key,
                             struct swr_vertex_element_state *velems);
 
+void swr_generate_gs_key(struct swr_jit_gs_key &key,
+                         struct swr_context *ctx,
+                         swr_geometry_shader *swr_gs);
+
+void swr_generate_tcs_key(struct swr_jit_tcs_key &key,
+                          struct swr_context *ctx,
+                          swr_tess_control_shader *swr_tcs);
+
+void swr_generate_tes_key(struct swr_jit_tes_key &key,
+                          struct swr_context *ctx,
+                          swr_tess_evaluation_shader *swr_tes);
+
 struct swr_jit_sampler_key {
    unsigned nr_samplers;
    unsigned nr_sampler_views;
@@ -57,6 +91,7 @@ struct swr_jit_fs_key : swr_jit_sampler_key {
    unsigned sprite_coord_enable;
    ubyte vs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
    ubyte vs_output_semantic_idx[PIPE_MAX_SHADER_OUTPUTS];
+   bool poly_stipple_enable;
 };
 
 struct swr_jit_vs_key : swr_jit_sampler_key {
@@ -67,6 +102,26 @@ struct swr_jit_fetch_key {
    FETCH_COMPILE_STATE fsState;
 };
 
+struct swr_jit_gs_key : swr_jit_sampler_key {
+   ubyte vs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
+   ubyte vs_output_semantic_idx[PIPE_MAX_SHADER_OUTPUTS];
+};
+
+// TESS_TODO: revisit this - we probably need to use
+// primitive modes, number of vertices emitted, etc.
+struct swr_jit_tcs_key : swr_jit_sampler_key {
+   ubyte vs_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
+   ubyte vs_output_semantic_idx[PIPE_MAX_SHADER_OUTPUTS];
+   unsigned clip_plane_mask; // from rasterizer state & tcs_info
+};
+
+// TESS_TODO: revisit this
+struct swr_jit_tes_key : swr_jit_sampler_key {
+   ubyte prev_output_semantic_name[PIPE_MAX_SHADER_OUTPUTS];
+   ubyte prev_output_semantic_idx[PIPE_MAX_SHADER_OUTPUTS];
+   unsigned clip_plane_mask; // from rasterizer state & tes_info
+};
+
 namespace std
 {
 template <> struct hash<swr_jit_fs_key> {
@@ -89,8 +144,32 @@ template <> struct hash<swr_jit_fetch_key> {
       return util_hash_crc32(&k, sizeof(k));
    }
 };
+
+template <> struct hash<swr_jit_gs_key> {
+   std::size_t operator()(const swr_jit_gs_key &k) const
+   {
+      return util_hash_crc32(&k, sizeof(k));
+   }
+};
+
+template <> struct hash<swr_jit_tcs_key> {
+   std::size_t operator()(const swr_jit_tcs_key &k) const
+   {
+      return util_hash_crc32(&k, sizeof(k));
+   }
+};
+
+template <> struct hash<swr_jit_tes_key> {
+   std::size_t operator()(const swr_jit_tes_key &k) const
+   {
+      return util_hash_crc32(&k, sizeof(k));
+   }
+};
 };
 
 bool operator==(const swr_jit_fs_key &lhs, const swr_jit_fs_key &rhs);
 bool operator==(const swr_jit_vs_key &lhs, const swr_jit_vs_key &rhs);
 bool operator==(const swr_jit_fetch_key &lhs, const swr_jit_fetch_key &rhs);
+bool operator==(const swr_jit_gs_key &lhs, const swr_jit_gs_key &rhs);
+bool operator==(const swr_jit_tcs_key &lhs, const swr_jit_tcs_key &rhs);
+bool operator==(const swr_jit_tes_key &lhs, const swr_jit_tes_key &rhs);