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

Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
Acked-by: Jesse Natalie <jenatali@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24440>
This commit is contained in:
Yonggang Luo 2023-08-03 11:58:28 +08:00 committed by Marge Bot
parent a36ad49e0e
commit 8bcb996a88
4 changed files with 45 additions and 20 deletions

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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

View file

@ -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;