gallium: add PIPE_SHADER_CAP_FP16_CONST_BUFFERS for FP16 uniforms
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9050>
This commit is contained in:
@@ -685,6 +685,11 @@ MOV OUT[0], CONST[0][3] # copy vector 3 of constbuf 0
|
||||
If unsupported, half precision ops need to be lowered to full precision.
|
||||
* ``PIPE_SHADER_CAP_FP16_DERIVATIVES``: Whether half precision floating-point
|
||||
DDX and DDY opcodes are supported.
|
||||
* ``PIPE_SHADER_CAP_FP16_CONST_BUFFERS``: Whether half precision floating-point
|
||||
constant buffer loads are supported. Drivers are recommended to report 0
|
||||
if x86 F16C is not supported by the CPU (or an equivalent instruction set
|
||||
on other CPU architectures), otherwise they could be impacted by emulated
|
||||
FP16 conversions in glUniform.
|
||||
* ``PIPE_SHADER_CAP_INT16``: Whether 16-bit signed and unsigned integer types
|
||||
are supported.
|
||||
* ``PIPE_SHADER_CAP_GLSL_16BIT_CONSTS``: Lower mediump constants to 16-bit.
|
||||
|
@@ -127,6 +127,7 @@ gallivm_get_shader_param(enum pipe_shader_cap param)
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -466,6 +466,7 @@ tgsi_exec_get_shader_param(enum pipe_shader_cap param)
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -361,6 +361,7 @@ etna_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -623,6 +623,7 @@ fd_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
return is_ir3(screen) ? 1 : 0;
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -164,6 +164,7 @@ i915_get_shader_param(struct pipe_screen *screen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -479,6 +479,7 @@ iris_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -352,6 +352,7 @@ nv30_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
@@ -409,6 +410,7 @@ nv30_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INTEGERS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
|
@@ -459,6 +459,7 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_SUBROUTINES:
|
||||
|
@@ -528,6 +528,7 @@ nvc0_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
|
||||
|
@@ -377,6 +377,7 @@ panfrost_get_shader_param(struct pipe_screen *screen,
|
||||
return (!is_nofp16 && !pan_is_bifrost(dev)) || is_fp16;
|
||||
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
|
@@ -296,6 +296,7 @@ static int r300_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
@@ -367,6 +368,7 @@ static int r300_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_SUBROUTINES:
|
||||
case PIPE_SHADER_CAP_INTEGERS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
|
@@ -618,6 +618,7 @@ static int r600_get_shader_param(struct pipe_screen* pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -434,6 +434,7 @@ static int si_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_typ
|
||||
/* Unsupported boolean features. */
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_SUBROUTINES:
|
||||
|
@@ -484,6 +484,7 @@ vgpu9_get_shader_param(struct pipe_screen *screen,
|
||||
return 0;
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
@@ -554,6 +555,7 @@ vgpu9_get_shader_param(struct pipe_screen *screen,
|
||||
return 0;
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
@@ -665,6 +667,7 @@ vgpu10_get_shader_param(struct pipe_screen *screen,
|
||||
return TRUE;
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return FALSE;
|
||||
|
@@ -381,6 +381,7 @@ v3d_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
|
||||
return 1;
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
|
@@ -284,6 +284,7 @@ vc4_screen_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
case PIPE_SHADER_CAP_TGSI_DROUND_SUPPORTED:
|
||||
|
@@ -428,6 +428,7 @@ virgl_get_shader_param(struct pipe_screen *screen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0;
|
||||
|
@@ -694,6 +694,7 @@ zink_get_shader_param(struct pipe_screen *pscreen,
|
||||
case PIPE_SHADER_CAP_INT64_ATOMICS:
|
||||
case PIPE_SHADER_CAP_FP16:
|
||||
case PIPE_SHADER_CAP_FP16_DERIVATIVES:
|
||||
case PIPE_SHADER_CAP_FP16_CONST_BUFFERS:
|
||||
case PIPE_SHADER_CAP_INT16:
|
||||
case PIPE_SHADER_CAP_GLSL_16BIT_CONSTS:
|
||||
return 0; /* not implemented */
|
||||
|
@@ -1058,6 +1058,7 @@ enum pipe_shader_cap
|
||||
PIPE_SHADER_CAP_INT64_ATOMICS,
|
||||
PIPE_SHADER_CAP_FP16,
|
||||
PIPE_SHADER_CAP_FP16_DERIVATIVES,
|
||||
PIPE_SHADER_CAP_FP16_CONST_BUFFERS,
|
||||
PIPE_SHADER_CAP_INT16,
|
||||
PIPE_SHADER_CAP_GLSL_16BIT_CONSTS,
|
||||
PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS,
|
||||
|
@@ -387,6 +387,8 @@ void st_init_limits(struct pipe_screen *screen,
|
||||
screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_INT16);
|
||||
options->LowerPrecisionConstants =
|
||||
screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_GLSL_16BIT_CONSTS);
|
||||
options->LowerPrecisionFloat16Uniforms =
|
||||
screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16_CONST_BUFFERS);
|
||||
}
|
||||
|
||||
c->MaxUserAssignableUniformLocations =
|
||||
|
Reference in New Issue
Block a user