mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 03:08:05 +02:00
gallium: Add a cap for enabling lowering of image load/store intrinsics.
The deref stuff is hard to handle in a backend supporting dynamic indexing, while the lowering can easily turn that into the same kind of dynamic indexing we do for textures, UBOs, and SSBOs. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3728>
This commit is contained in:
parent
7342b859af
commit
9c90ecf37f
4 changed files with 6 additions and 0 deletions
|
|
@ -407,6 +407,8 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen,
|
|||
case PIPE_CAP_OPENCL_INTEGER_FUNCTIONS:
|
||||
case PIPE_CAP_INTEGER_MULTIPLY_32X16:
|
||||
return 0;
|
||||
case PIPE_CAP_NIR_IMAGES_AS_DEREF:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_FRONTEND_NOOP:
|
||||
/* Enables INTEL_blackhole_render */
|
||||
|
|
|
|||
|
|
@ -567,6 +567,7 @@ The integer capabilities:
|
|||
* ``PIPE_CAP_MAX_VERTEX_BUFFERS``: Number of supported vertex buffers.
|
||||
* ``PIPE_CAP_OPENCL_INTEGER_FUNCTIONS``: Driver supports extended OpenCL-style integer functions. This includes averge, saturating additiong, saturating subtraction, absolute difference, count leading zeros, and count trailing zeros.
|
||||
* ``PIPE_CAP_INTEGER_MULTIPLY_32X16``: Driver supports integer multiplication between a 32-bit integer and a 16-bit integer. If the second operand is 32-bits, the upper 16-bits are ignored, and the low 16-bits are possibly sign extended as necessary.
|
||||
* ``PIPE_CAP_NIR_IMAGES_AS_DEREF``: Whether NIR image load/store intrinsics should be nir_intrinsic_image_deref_* instead of nir_intrinsic_image_*. Defaults to true.
|
||||
|
||||
.. _pipe_capf:
|
||||
|
||||
|
|
|
|||
|
|
@ -914,6 +914,7 @@ enum pipe_cap
|
|||
PIPE_CAP_INTEGER_MULTIPLY_32X16,
|
||||
/* Turn draw, dispatch, blit into NOOP */
|
||||
PIPE_CAP_FRONTEND_NOOP,
|
||||
PIPE_CAP_NIR_IMAGES_AS_DEREF,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -941,6 +941,8 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog,
|
|||
|
||||
st_nir_lower_uniforms(st, nir);
|
||||
st_nir_lower_samplers(screen, nir, shader_program, prog);
|
||||
if (!screen->get_param(screen, PIPE_CAP_NIR_IMAGES_AS_DEREF))
|
||||
NIR_PASS_V(nir, gl_nir_lower_images, false);
|
||||
|
||||
if (finalize_by_driver && screen->finalize_nir)
|
||||
screen->finalize_nir(screen, nir, false);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue