Module: Mesa
Branch: main
Commit: 8bcb996a885bfef854e2afbba2f8316674589fcd
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bcb996a885bfef854e2afbba2f8316674589fcd

Author: Yonggang Luo <luoyongg...@gmail.com>
Date:   Thu Aug  3 11:58:28 2023 +0800

micosoft: define enum dxil_tex_wrap to avoid the usage of enum pipe_tex_wrap

Signed-off-by: Yonggang Luo <luoyongg...@gmail.com>
Acked-by: Jesse Natalie <jenat...@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24440>

---

 src/gallium/drivers/d3d12/d3d12_context.cpp         | 21 ++++++++++++++++++---
 src/microsoft/clc/clc_compiler.c                    | 10 +++++-----
 .../compiler/dxil_nir_lower_int_samplers.c          | 20 ++++++++++----------
 .../compiler/dxil_nir_lower_int_samplers.h          | 14 ++++++++++++--
 4 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp 
b/src/gallium/drivers/d3d12/d3d12_context.cpp
index 8e0a7753a53..a5134471e2d 100644
--- a/src/gallium/drivers/d3d12/d3d12_context.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_context.cpp
@@ -743,6 +743,21 @@ d3d12_create_sampler_state(struct pipe_context *pctx,
    return ss;
 }
 
+static inline enum dxil_tex_wrap
+pipe_to_dxil_tex_wrap(enum pipe_tex_wrap wrap)
+{
+   static_assert((uint8_t) PIPE_TEX_WRAP_REPEAT == (uint8_t) 
DXIL_TEX_WRAP_REPEAT, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_CLAMP == (uint8_t) 
DXIL_TEX_WRAP_CLAMP, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_CLAMP_TO_EDGE == (uint8_t) 
DXIL_TEX_WRAP_CLAMP_TO_EDGE, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_CLAMP_TO_BORDER == (uint8_t) 
DXIL_TEX_WRAP_CLAMP_TO_BORDER, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_MIRROR_REPEAT == (uint8_t) 
DXIL_TEX_WRAP_MIRROR_REPEAT, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_MIRROR_CLAMP == (uint8_t) 
DXIL_TEX_WRAP_MIRROR_CLAMP, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE == (uint8_t) 
DXIL_TEX_WRAP_MIRROR_CLAMP_TO_EDGE, "");
+   static_assert((uint8_t) PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER == (uint8_t) 
DXIL_TEX_WRAP_MIRROR_CLAMP_TO_BORDER, "");
+
+   return (enum dxil_tex_wrap) wrap;
+}
+
 static void
 d3d12_bind_sampler_states(struct pipe_context *pctx,
                           enum pipe_shader_type shader,
@@ -770,9 +785,9 @@ d3d12_bind_sampler_states(struct pipe_context *pctx,
       ctx->samplers[shader][start_slot + i] = sampler;
       dxil_wrap_sampler_state &wrap = ctx->tex_wrap_states[shader][start_slot 
+ i];
       if (sampler) {
-         wrap.wrap[0] = sampler->wrap_s;
-         wrap.wrap[1] = sampler->wrap_t;
-         wrap.wrap[2] = sampler->wrap_r;
+         wrap.wrap[0] = pipe_to_dxil_tex_wrap(sampler->wrap_s);
+         wrap.wrap[1] = pipe_to_dxil_tex_wrap(sampler->wrap_t);
+         wrap.wrap[2] = pipe_to_dxil_tex_wrap(sampler->wrap_r);
          wrap.lod_bias = sampler->lod_bias;
          wrap.min_lod = sampler->min_lod;
          wrap.max_lod = sampler->max_lod;
diff --git a/src/microsoft/clc/clc_compiler.c b/src/microsoft/clc/clc_compiler.c
index 882f4dba653..f8a9f5af076 100644
--- a/src/microsoft/clc/clc_compiler.c
+++ b/src/microsoft/clc/clc_compiler.c
@@ -542,7 +542,7 @@ copy_const_initializer(const nir_constant *constant, const 
struct glsl_type *typ
    }
 }
 
-static enum pipe_tex_wrap
+static enum dxil_tex_wrap
 wrap_from_cl_addressing(unsigned addressing_mode)
 {
    switch (addressing_mode)
@@ -551,10 +551,10 @@ wrap_from_cl_addressing(unsigned addressing_mode)
    case SAMPLER_ADDRESSING_MODE_NONE:
    case SAMPLER_ADDRESSING_MODE_CLAMP:
       // Since OpenCL's only border color is 0's and D3D specs out-of-bounds 
loads to return 0, don't apply any wrap mode
-      return (enum pipe_tex_wrap)-1;
-   case SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE: return 
PIPE_TEX_WRAP_CLAMP_TO_EDGE;
-   case SAMPLER_ADDRESSING_MODE_REPEAT: return PIPE_TEX_WRAP_REPEAT;
-   case SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED: return 
PIPE_TEX_WRAP_MIRROR_REPEAT;
+      return (enum dxil_tex_wrap)-1;
+   case SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE: return 
DXIL_TEX_WRAP_CLAMP_TO_EDGE;
+   case SAMPLER_ADDRESSING_MODE_REPEAT: return DXIL_TEX_WRAP_REPEAT;
+   case SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED: return 
DXIL_TEX_WRAP_MIRROR_REPEAT;
    }
 }
 
diff --git a/src/microsoft/compiler/dxil_nir_lower_int_samplers.c 
b/src/microsoft/compiler/dxil_nir_lower_int_samplers.c
index d6b933f145e..0fde461543f 100644
--- a/src/microsoft/compiler/dxil_nir_lower_int_samplers.c
+++ b/src/microsoft/compiler/dxil_nir_lower_int_samplers.c
@@ -189,30 +189,30 @@ wrap_mirror_clamp(nir_builder *b, wrap_result_t 
*wrap_params, nir_def *size)
 }
 
 static wrap_result_t
-wrap_coords(nir_builder *b, nir_def *coords, enum pipe_tex_wrap wrap,
+wrap_coords(nir_builder *b, nir_def *coords, enum dxil_tex_wrap wrap,
             nir_def *size)
 {
    wrap_result_t result = {coords, nir_imm_false(b)};
 
    switch (wrap) {
-   case PIPE_TEX_WRAP_CLAMP_TO_EDGE:
+   case DXIL_TEX_WRAP_CLAMP_TO_EDGE:
       wrap_clamp_to_edge(b, &result, size);
       break;
-   case PIPE_TEX_WRAP_REPEAT:
+   case DXIL_TEX_WRAP_REPEAT:
       wrap_repeat(b, &result, size);
       break;
-   case PIPE_TEX_WRAP_MIRROR_REPEAT:
+   case DXIL_TEX_WRAP_MIRROR_REPEAT:
       wrap_mirror_repeat(b, &result, size);
       break;
-   case PIPE_TEX_WRAP_MIRROR_CLAMP:
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
+   case DXIL_TEX_WRAP_MIRROR_CLAMP:
+   case DXIL_TEX_WRAP_MIRROR_CLAMP_TO_EDGE:
       wrap_mirror_clamp_to_edge(b, &result, size);
       break;
-   case PIPE_TEX_WRAP_CLAMP:
-   case PIPE_TEX_WRAP_CLAMP_TO_BORDER:
+   case DXIL_TEX_WRAP_CLAMP:
+   case DXIL_TEX_WRAP_CLAMP_TO_BORDER:
       wrap_clamp(b, &result, size);
       break;
-   case PIPE_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
+   case DXIL_TEX_WRAP_MIRROR_CLAMP_TO_BORDER:
       wrap_mirror_clamp(b, &result, size);
       break;
    }
@@ -522,7 +522,7 @@ lower_sample_to_txf_for_integer_tex_impl(nir_builder *b, 
nir_instr *instr,
       if (tex->is_array)
          params.wrap[params.ncoord_comp] =
                wrap_coords(b, coord_help[params.ncoord_comp],
-                           PIPE_TEX_WRAP_CLAMP_TO_EDGE,
+                           DXIL_TEX_WRAP_CLAMP_TO_EDGE,
                            nir_i2f32(b, nir_channel(b, size0, 
params.ncoord_comp)));
    } else {
       /* When we emulate a cube map by using a texture array, the coordinates 
are always
diff --git a/src/microsoft/compiler/dxil_nir_lower_int_samplers.h 
b/src/microsoft/compiler/dxil_nir_lower_int_samplers.h
index 1c0c45ed410..347c99ff6c7 100644
--- a/src/microsoft/compiler/dxil_nir_lower_int_samplers.h
+++ b/src/microsoft/compiler/dxil_nir_lower_int_samplers.h
@@ -24,7 +24,6 @@
 #ifndef DXIL_NIR_LOWER_INT_SAMPLERS_H
 #define DXIL_NIR_LOWER_INT_SAMPLERS_H
 
-#include "pipe/p_state.h"
 #include "nir.h"
 
 #ifdef __cplusplus
@@ -38,12 +37,23 @@ typedef struct {
    unsigned swizzle_a:3;
 } dxil_texture_swizzle_state;
 
+enum dxil_tex_wrap {
+   DXIL_TEX_WRAP_REPEAT,
+   DXIL_TEX_WRAP_CLAMP,
+   DXIL_TEX_WRAP_CLAMP_TO_EDGE,
+   DXIL_TEX_WRAP_CLAMP_TO_BORDER,
+   DXIL_TEX_WRAP_MIRROR_REPEAT,
+   DXIL_TEX_WRAP_MIRROR_CLAMP,
+   DXIL_TEX_WRAP_MIRROR_CLAMP_TO_EDGE,
+   DXIL_TEX_WRAP_MIRROR_CLAMP_TO_BORDER,
+};
+
 typedef struct {
    float border_color[4];
    float lod_bias;
    float min_lod, max_lod;
    int last_level;
-   uint8_t wrap[3];
+   uint8_t wrap[3]; /* enum dxil_tex_wrap */
    uint8_t is_int_sampler:1;
    uint8_t is_nonnormalized_coords:1;
    uint8_t is_linear_filtering:1;

Reply via email to