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;