gallium+glsl: Remove EmitNoSat/PIPE_CAP_VERTEX_SHADER_SATURATE
The drivers not setting it were: - nv30, which gets lowering using NIR's lower_fsat flag. - r300, which gets lowering using NIR's lower_fsat flag. - a2xx, which has was getting it optimized back to fsat anyway. This drops the check for the cap from gallium nine. While nine does have a non-nir path, I think it's safe to assume that if you have SM3 texturing, you can do fsat. Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16823>
This commit is contained in:
parent
7a8e3c80fd
commit
8c4b88ee48
|
@ -572,8 +572,6 @@ The integer capabilities:
|
|||
explicit LOD is supported in the fragment shader.
|
||||
* ``PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES``: True if the driver supports
|
||||
derivatives in fragment shaders.
|
||||
* ``PIPE_CAP_VERTEX_SHADER_SATURATE``: True if the driver supports saturate
|
||||
modifiers in the vertex shader.
|
||||
* ``PIPE_CAP_TEXTURE_SHADOW_LOD``: True if the driver supports shadow sampler
|
||||
types with texture functions having interaction with LOD of texture lookup.
|
||||
* ``PIPE_CAP_SHADER_SAMPLES_IDENTICAL``: True if the driver supports a shader query to tell whether all samples of a multisampled surface are definitely identical.
|
||||
|
|
|
@ -42,7 +42,6 @@ struct gl_shader_program;
|
|||
#define LDEXP_TO_ARITH 0x80
|
||||
#define CARRY_TO_ARITH 0x100
|
||||
#define BORROW_TO_ARITH 0x200
|
||||
#define SAT_TO_CLAMP 0x400
|
||||
#define DOPS_TO_DFRAC 0x800
|
||||
#define DFREXP_DLDEXP_TO_ARITH 0x1000
|
||||
#define BIT_COUNT_TO_MATH 0x02000
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
* - LDEXP_TO_ARITH
|
||||
* - CARRY_TO_ARITH
|
||||
* - BORROW_TO_ARITH
|
||||
* - SAT_TO_CLAMP
|
||||
* - DOPS_TO_DFRAC
|
||||
*
|
||||
* SUB_TO_ADD_NEG:
|
||||
|
@ -97,10 +96,6 @@
|
|||
* ----------------
|
||||
* Converts ir_borrow into (x < y).
|
||||
*
|
||||
* SAT_TO_CLAMP:
|
||||
* -------------
|
||||
* Converts ir_unop_saturate into min(max(x, 0.0), 1.0)
|
||||
*
|
||||
* DOPS_TO_DFRAC:
|
||||
* --------------
|
||||
* Converts double trunc, ceil, floor, round to fract
|
||||
|
@ -142,7 +137,6 @@ private:
|
|||
void dfrexp_exp_to_arith(ir_expression *);
|
||||
void carry_to_arith(ir_expression *);
|
||||
void borrow_to_arith(ir_expression *);
|
||||
void sat_to_clamp(ir_expression *);
|
||||
void double_dot_to_fma(ir_expression *);
|
||||
void double_lrp(ir_expression *);
|
||||
void dceil_to_dfrac(ir_expression *);
|
||||
|
@ -754,26 +748,6 @@ lower_instructions_visitor::borrow_to_arith(ir_expression *ir)
|
|||
this->progress = true;
|
||||
}
|
||||
|
||||
void
|
||||
lower_instructions_visitor::sat_to_clamp(ir_expression *ir)
|
||||
{
|
||||
/* Translates
|
||||
* ir_unop_saturate x
|
||||
* into
|
||||
* ir_binop_min (ir_binop_max(x, 0.0), 1.0)
|
||||
*/
|
||||
|
||||
ir->operation = ir_binop_min;
|
||||
ir->init_num_operands();
|
||||
|
||||
ir_constant *zero = _imm_fp(ir, ir->operands[0]->type, 0.0);
|
||||
ir->operands[0] = new(ir) ir_expression(ir_binop_max, ir->operands[0]->type,
|
||||
ir->operands[0], zero);
|
||||
ir->operands[1] = _imm_fp(ir, ir->operands[0]->type, 1.0);
|
||||
|
||||
this->progress = true;
|
||||
}
|
||||
|
||||
void
|
||||
lower_instructions_visitor::double_dot_to_fma(ir_expression *ir)
|
||||
{
|
||||
|
@ -1677,11 +1651,6 @@ lower_instructions_visitor::visit_leave(ir_expression *ir)
|
|||
borrow_to_arith(ir);
|
||||
break;
|
||||
|
||||
case ir_unop_saturate:
|
||||
if (lowering(SAT_TO_CLAMP))
|
||||
sat_to_clamp(ir);
|
||||
break;
|
||||
|
||||
case ir_unop_trunc:
|
||||
if (lowering(DOPS_TO_DFRAC) && ir->type->is_double())
|
||||
dtrunc_to_dfrac(ir);
|
||||
|
|
|
@ -860,7 +860,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
|
|||
|
||||
case ir_binop_min:
|
||||
case ir_binop_max:
|
||||
if (!ir->type->is_float() || options->EmitNoSat)
|
||||
if (!ir->type->is_float())
|
||||
break;
|
||||
|
||||
/* Replace min(max) operations and its commutative combinations with
|
||||
|
|
|
@ -64,7 +64,6 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
|||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS: /* enables EXT_transform_feedback */
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
|
|
|
@ -724,7 +724,6 @@ agx_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||
|
|
|
@ -148,7 +148,6 @@ crocus_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
|
|
|
@ -158,7 +158,6 @@ d3d12_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
|
||||
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_RGB_OVERRIDE_DST_ALPHA_BLEND:
|
||||
|
|
|
@ -143,7 +143,6 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_TEXTURE_BARRIER:
|
||||
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
|
||||
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
|
|
|
@ -248,7 +248,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
case PIPE_CAP_VS_INSTANCEID:
|
||||
|
|
|
@ -203,7 +203,6 @@ iris_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
|
|
|
@ -125,7 +125,6 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
return 1;
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return 1;
|
||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||
return 1;
|
||||
|
|
|
@ -124,7 +124,6 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||
|
|
|
@ -209,7 +209,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_POINT_SPRITE:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
|
||||
|
|
|
@ -230,7 +230,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_TGSI_TEXCOORD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
|
||||
|
|
|
@ -109,7 +109,6 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
case PIPE_CAP_MIXED_COLOR_DEPTH_BITS:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_POINT_SPRITE:
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||
|
|
|
@ -173,7 +173,6 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return is_r500 ? 1 : 0;
|
||||
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
|
|
|
@ -279,7 +279,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
|
|
|
@ -74,7 +74,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_FS_COORD_PIXEL_CENTER_INTEGER:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||
|
|
|
@ -113,7 +113,6 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
return 1;
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return 1;
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
return 1;
|
||||
|
|
|
@ -298,7 +298,6 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||
|
|
|
@ -127,7 +127,6 @@ v3d_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_VS_INSTANCEID:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
case PIPE_CAP_EMULATE_NONFIXED_PRIMITIVE_RESTART:
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
|
|
|
@ -83,7 +83,6 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
return 1;
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return 1;
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
return vscreen->caps.caps.v2.max_anisotropy > 1.0;
|
||||
|
|
|
@ -548,7 +548,6 @@ zink_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||
|
||||
case PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD:
|
||||
case PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES:
|
||||
case PIPE_CAP_VERTEX_SHADER_SATURATE:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
|
|
|
@ -38,8 +38,7 @@ static bool
|
|||
has_sm3(struct pipe_screen *hal)
|
||||
{
|
||||
return hal->get_param(hal, PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD) &&
|
||||
hal->get_param(hal, PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES) &&
|
||||
hal->get_param(hal, PIPE_CAP_VERTEX_SHADER_SATURATE);
|
||||
hal->get_param(hal, PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES);
|
||||
}
|
||||
|
||||
HRESULT
|
||||
|
|
|
@ -953,7 +953,6 @@ enum pipe_cap
|
|||
PIPE_CAP_TGSI_DIV,
|
||||
PIPE_CAP_FRAGMENT_SHADER_TEXTURE_LOD,
|
||||
PIPE_CAP_FRAGMENT_SHADER_DERIVATIVES,
|
||||
PIPE_CAP_VERTEX_SHADER_SATURATE,
|
||||
PIPE_CAP_TEXTURE_SHADOW_LOD,
|
||||
PIPE_CAP_SHADER_SAMPLES_IDENTICAL,
|
||||
PIPE_CAP_IMAGE_ATOMIC_INC_WRAP,
|
||||
|
|
|
@ -313,7 +313,6 @@ struct gl_shader_compiler_options
|
|||
/** Driver-selectable options: */
|
||||
GLboolean EmitNoCont; /**< Emit CONT opcode? */
|
||||
GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */
|
||||
GLboolean EmitNoSat; /**< Emit SAT opcodes? */
|
||||
GLboolean LowerCombinedClipCullDistance; /** Lower gl_ClipDistance and
|
||||
* gl_CullDistance together from
|
||||
* float[8] to vec4[2]
|
||||
|
|
|
@ -685,12 +685,6 @@ st_create_context_priv(struct gl_context *ctx, struct pipe_context *pipe,
|
|||
ctx->Const.NoClippingOnCopyTex = screen->get_param(screen,
|
||||
PIPE_CAP_NO_CLIP_ON_COPY_TEX);
|
||||
|
||||
/* For vertex shaders, make sure not to emit saturate when SM 3.0
|
||||
* is not supported
|
||||
*/
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].EmitNoSat =
|
||||
!screen->get_param(screen, PIPE_CAP_VERTEX_SHADER_SATURATE);
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_VERTEX].PositionAlwaysInvariant = options->vs_position_always_invariant;
|
||||
|
||||
ctx->Const.ShaderCompilerOptions[MESA_SHADER_TESS_EVAL].PositionAlwaysPrecise = options->vs_position_always_precise;
|
||||
|
|
|
@ -112,7 +112,6 @@ link_shader(struct gl_context *ctx, struct gl_shader_program *prog)
|
|||
BORROW_TO_ARITH |
|
||||
(have_dround ? 0 : DOPS_TO_DFRAC) |
|
||||
(!ctx->Const.NativeIntegers ? INT_DIV_TO_MUL_RCP : 0) |
|
||||
(options->EmitNoSat ? SAT_TO_CLAMP : 0) |
|
||||
(ctx->Const.ForceGLSLAbsSqrt ? SQRT_TO_ABS_SQRT : 0) |
|
||||
/* Assume that if ARB_gpu_shader5 is not supported
|
||||
* then all of the extended integer functions need
|
||||
|
|
Loading…
Reference in New Issue