On Tuesday, May 05, 2015 11:29:52 PM Francisco Jerez wrote: > --- > src/glsl/nir/nir_intrinsics.h | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/src/glsl/nir/nir_intrinsics.h b/src/glsl/nir/nir_intrinsics.h > index 8e28765..4b13c75 100644 > --- a/src/glsl/nir/nir_intrinsics.h > +++ b/src/glsl/nir/nir_intrinsics.h > @@ -89,6 +89,33 @@ ATOMIC(inc, 0) > ATOMIC(dec, 0) > ATOMIC(read, NIR_INTRINSIC_CAN_ELIMINATE) > > +/* > + * Image load, store and atomic intrinsics. > + * > + * All image intrinsics take an image target passed as a nir_variable. Image > + * variables contain a number of memory and layout qualifiers that influence > + * the semantics of the intrinsic. > + * > + * All image intrinsics take a four-coordinate vector and a sample index as > + * first two sources, determining the location within the image that will be > + * accessed by the intrinsic. Components not applicable to the image target > + * in use are equal to zero by convention. Image store takes an additional > + * four-component argument with the value to be written, and image atomic > + * operations take either one or two additional scalar arguments with the > same > + * meaning as in the ARB_shader_image_load_store specification. > + */ > +INTRINSIC(image_load, 2, ARR(4, 1), true, 4, 1, 0, > + NIR_INTRINSIC_CAN_ELIMINATE) > +INTRINSIC(image_store, 3, ARR(4, 1, 4), false, 0, 1, 0, 0) > +INTRINSIC(image_atomic_add, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_min, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_max, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_and, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_or, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_xor, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_exchange, 3, ARR(4, 1, 1), true, 1, 1, 0, 0) > +INTRINSIC(image_atomic_comp_swap, 4, ARR(4, 1, 1, 1), true, 1, 1, 0, 0) > + > #define SYSTEM_VALUE(name, components) \ > INTRINSIC(load_##name, 0, ARR(), true, components, 0, 0, \ > NIR_INTRINSIC_CAN_ELIMINATE | NIR_INTRINSIC_CAN_REORDER) >
Looks great, Curro. Expanding the coordinate to a vec4 and always having the parameters present for e.g. sample_index does reduce the combinatorial explosion a lot. FWIW, I also prefer undefined. This should work out fine for SPIR-V too, it's pretty trivial to go from their style to this (just combine the two - it's SSA after all). These 5 are: Reviewed-by: Kenneth Graunke <kenn...@whitecape.org>
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev