mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 12:50:12 +01:00
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:
parent
a36ad49e0e
commit
8bcb996a88
4 changed files with 45 additions and 20 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue