llvmpipe: convert a bunch of shader_type ifs to switches.
authorDave Airlie <airlied@redhat.com>
Tue, 16 May 2023 20:42:32 +0000 (06:42 +1000)
committerMarge Bot <emma+marge@anholt.net>
Tue, 23 May 2023 14:39:32 +0000 (14:39 +0000)
This makes it easier to add mesh shader support later

Reviewed-by: Brian Paul <brianp@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23065>

src/gallium/drivers/llvmpipe/lp_state_fs.c
src/gallium/drivers/llvmpipe/lp_state_sampler.c

index 8730a59..31d5db0 100644 (file)
@@ -4196,11 +4196,11 @@ llvmpipe_set_constant_buffer(struct pipe_context *pipe,
       }
    }
 
-   if (shader == PIPE_SHADER_VERTEX ||
-       shader == PIPE_SHADER_GEOMETRY ||
-       shader == PIPE_SHADER_TESS_CTRL ||
-       shader == PIPE_SHADER_TESS_EVAL) {
-      /* Pass the constants to the 'draw' module */
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+   case PIPE_SHADER_GEOMETRY:
+   case PIPE_SHADER_TESS_CTRL:
+   case PIPE_SHADER_TESS_EVAL: {
       const unsigned size = cb ? cb->buffer_size : 0;
 
       const ubyte *data = NULL;
@@ -4211,10 +4211,17 @@ llvmpipe_set_constant_buffer(struct pipe_context *pipe,
 
       draw_set_mapped_constant_buffer(llvmpipe->draw, shader,
                                       index, data, size);
-   } else if (shader == PIPE_SHADER_COMPUTE) {
+      break;
+   }
+   case PIPE_SHADER_COMPUTE:
       llvmpipe->cs_dirty |= LP_CSNEW_CONSTANTS;
-   } else {
+      break;
+   case PIPE_SHADER_FRAGMENT:
       llvmpipe->dirty |= LP_NEW_FS_CONSTANTS;
+      break;
+   default:
+      unreachable("Illegal shader type");
+      break;
    }
 }
 
@@ -4240,10 +4247,11 @@ llvmpipe_set_shader_buffers(struct pipe_context *pipe,
                                  false, "buffer");
       }
 
-      if (shader == PIPE_SHADER_VERTEX ||
-          shader == PIPE_SHADER_GEOMETRY ||
-          shader == PIPE_SHADER_TESS_CTRL ||
-          shader == PIPE_SHADER_TESS_EVAL) {
+      switch (shader) {
+      case PIPE_SHADER_VERTEX:
+      case PIPE_SHADER_GEOMETRY:
+      case PIPE_SHADER_TESS_CTRL:
+      case PIPE_SHADER_TESS_EVAL: {
          const unsigned size = buffer ? buffer->buffer_size : 0;
          const ubyte *data = NULL;
          if (buffer && buffer->buffer)
@@ -4252,12 +4260,19 @@ llvmpipe_set_shader_buffers(struct pipe_context *pipe,
             data += buffer->buffer_offset;
          draw_set_mapped_shader_buffer(llvmpipe->draw, shader,
                                        i, data, size);
-      } else if (shader == PIPE_SHADER_COMPUTE) {
+         break;
+      }
+      case PIPE_SHADER_COMPUTE:
          llvmpipe->cs_dirty |= LP_CSNEW_SSBOS;
-      } else if (shader == PIPE_SHADER_FRAGMENT) {
+         break;
+      case PIPE_SHADER_FRAGMENT:
          llvmpipe->fs_ssbo_write_mask &= ~(((1 << count) - 1) << start_slot);
          llvmpipe->fs_ssbo_write_mask |= writable_bitmask << start_slot;
          llvmpipe->dirty |= LP_NEW_FS_SSBOS;
+         break;
+      default:
+         unreachable("Illegal shader type");
+         break;
       }
    }
 }
@@ -4286,16 +4301,23 @@ llvmpipe_set_shader_images(struct pipe_context *pipe,
    }
 
    llvmpipe->num_images[shader] = start_slot + count;
-   if (shader == PIPE_SHADER_VERTEX ||
-       shader == PIPE_SHADER_GEOMETRY ||
-       shader == PIPE_SHADER_TESS_CTRL ||
-       shader == PIPE_SHADER_TESS_EVAL) {
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+   case PIPE_SHADER_GEOMETRY:
+   case PIPE_SHADER_TESS_CTRL:
+   case PIPE_SHADER_TESS_EVAL:
       draw_set_images(llvmpipe->draw, shader, llvmpipe->images[shader],
                       start_slot + count);
-   } else if (shader == PIPE_SHADER_COMPUTE) {
+      break;
+   case PIPE_SHADER_COMPUTE:
       llvmpipe->cs_dirty |= LP_CSNEW_IMAGES;
-   } else {
+      break;
+   case PIPE_SHADER_FRAGMENT:
       llvmpipe->dirty |= LP_NEW_FS_IMAGES;
+      break;
+   default:
+      unreachable("Illegal shader type");
+      break;
    }
 
    if (unbind_num_trailing_slots) {
index c316ddd..785f0f1 100644 (file)
@@ -96,18 +96,25 @@ llvmpipe_bind_sampler_states(struct pipe_context *pipe,
       llvmpipe->num_samplers[shader] = j;
    }
 
-   if (shader == PIPE_SHADER_VERTEX ||
-       shader == PIPE_SHADER_GEOMETRY ||
-       shader == PIPE_SHADER_TESS_CTRL ||
-       shader == PIPE_SHADER_TESS_EVAL) {
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+   case PIPE_SHADER_GEOMETRY:
+   case PIPE_SHADER_TESS_CTRL:
+   case PIPE_SHADER_TESS_EVAL:
       draw_set_samplers(llvmpipe->draw,
                         shader,
                         llvmpipe->samplers[shader],
                         llvmpipe->num_samplers[shader]);
-   } else if (shader == PIPE_SHADER_COMPUTE) {
+      break;
+   case PIPE_SHADER_COMPUTE:
       llvmpipe->cs_dirty |= LP_CSNEW_SAMPLER;
-   } else {
+      break;
+   case PIPE_SHADER_FRAGMENT:
       llvmpipe->dirty |= LP_NEW_SAMPLER;
+      break;
+   default:
+      unreachable("Illegal shader type");
+      break;
    }
 }
 
@@ -174,21 +181,28 @@ llvmpipe_set_sampler_views(struct pipe_context *pipe,
       llvmpipe->num_sampler_views[shader] = j;
    }
 
-   if (shader == PIPE_SHADER_VERTEX ||
-       shader == PIPE_SHADER_GEOMETRY ||
-       shader == PIPE_SHADER_TESS_CTRL ||
-       shader == PIPE_SHADER_TESS_EVAL) {
+   switch (shader) {
+   case PIPE_SHADER_VERTEX:
+   case PIPE_SHADER_GEOMETRY:
+   case PIPE_SHADER_TESS_CTRL:
+   case PIPE_SHADER_TESS_EVAL:
       draw_set_sampler_views(llvmpipe->draw,
                              shader,
                              llvmpipe->sampler_views[shader],
                              llvmpipe->num_sampler_views[shader]);
-   } else if (shader == PIPE_SHADER_COMPUTE) {
+      break;
+   case PIPE_SHADER_COMPUTE:
       llvmpipe->cs_dirty |= LP_CSNEW_SAMPLER_VIEW;
-   } else if (shader == PIPE_SHADER_FRAGMENT) {
+      break;
+   case PIPE_SHADER_FRAGMENT:
       llvmpipe->dirty |= LP_NEW_SAMPLER_VIEW;
       lp_setup_set_fragment_sampler_views(llvmpipe->setup,
                                           llvmpipe->num_sampler_views[PIPE_SHADER_FRAGMENT],
                                           llvmpipe->sampler_views[PIPE_SHADER_FRAGMENT]);
+      break;
+   default:
+      unreachable("Illegal shader type");
+      break;
    }
 }