-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
On 13/05/16 05:05, Francisco Jerez wrote: > Samuel Iglesias Gonsálvez <[email protected]> writes: > >> From: Iago Toral Quiroga <[email protected]> >> >> This does the inverse operation of >> shuffle_32bit_load_result_to_64bit_data and we will use it when >> we need to write 64-bit data in the layout expected by untyped >> write messages. >> >> v2 (curro): - Use subscript() instead of stride() - Assert on the >> input types rather than silently retyping. - Use offset() instead >> of horiz_offset(), drop the multiplier definition. - Drop the >> temporary vgrf and force_writemask_all. - Make component_i >> const. --- src/mesa/drivers/dri/i965/brw_fs.cpp | 40 >> ++++++++++++++++++++++++++++++++++++ >> src/mesa/drivers/dri/i965/brw_fs.h | 5 +++++ 2 files changed, >> 45 insertions(+) >> >> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp >> b/src/mesa/drivers/dri/i965/brw_fs.cpp index ebc5128..3c58ccb >> 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ >> b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -280,6 +280,46 @@ >> fs_visitor::shuffle_32bit_load_result_to_64bit_data(const >> fs_builder &bld, } >> >> /** + * This helper does the inverse operation of + * >> SHUFFLE_32BIT_LOAD_RESULT_TO_64BIT_DATA. + * + * We need to do >> this when we are going to use untyped write messsages that + * >> operate with 32-bit components in order to arrange our 64-bit >> data to be + * in the expected layout. + */ +void >> +fs_visitor::shuffle_64bit_data_for_32bit_write(const fs_builder >> &bld, + const >> fs_reg dst, + const >> fs_reg src, + >> uint32_t components) +{ + assert(type_sz(src.type) == 8); + >> assert(type_sz(dst.type) == 4); + + /* A temporary that we will >> use to shuffle the 64-bit data of each + * component in the >> vector into valid 32-bit data that we can write. + * We can't >> write directly to dst because dst can be (and would usually be) + >> * the same as src and in that case the first MOV in the loop >> below would + * overwrite the data read in the second MOV. + >> */ + fs_reg tmp = retype(bld.vgrf(src.type), dst.type); + > > This is just 'bld.vgrf(dst.type, 2)' as I suggested off-list, other > than that: > > Reviewed-by: Francisco Jerez <[email protected]> > I'll do the change, thanks. Sam >> + for (unsigned i = 0; i < components; i++) { + const >> fs_reg component_i = offset(src, bld, i); + + bld.MOV(tmp, >> subscript(component_i, dst.type, 0)); + bld.MOV(offset(tmp, >> bld, 1), subscript(component_i, dst.type, 1)); + + /* >> Because we are shuffling our 64-bit data to a 32-bit layout, we + >> * need these MOVs to be 32-bit (instead of doing this as a >> single + * DF MOV), otherwise we would not be respecting >> the channel enables. + */ + bld.MOV(offset(dst, bld, 2 >> * i), tmp); + bld.MOV(offset(dst, bld, 2 * i + 1), >> offset(tmp, bld, 1)); + } +} + +/** * A helper for MOV >> generation for fixing up broken hardware SEND dependency * >> handling. */ diff --git a/src/mesa/drivers/dri/i965/brw_fs.h >> b/src/mesa/drivers/dri/i965/brw_fs.h index 1aeacae..4c17ff4 >> 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ >> b/src/mesa/drivers/dri/i965/brw_fs.h @@ -110,6 +110,11 @@ >> public: const fs_reg src, uint32_t components); >> >> + void shuffle_64bit_data_for_32bit_write(const brw::fs_builder >> &bld, + const fs_reg >> dst, + const fs_reg >> src, + uint32_t >> components); + void do_untyped_vector_read(const brw::fs_builder >> &bld, const fs_reg surf_index, const fs_reg offset_reg, -- 2.5.0 >> >> _______________________________________________ mesa-dev mailing >> list [email protected] >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXNWdPAAoJEH/0ujLxfcNDAcoP+weYYE1VyNm+82JoOqrcD9vw Uw9jaCV7GUhA1nosKdwqNpkRAEMbzJFx1VbsGsAdSNhGLyV5R+aInjECGUxHRcYk /zEjIhTUvHduzv5643b/Chk+a2s2EEDddkBeiOPlaNQsLzmfF/fPt+tIFySoiesG /Q+wa9ds7W3Vv+YmYlP6R7TxyXBJVN9FJqVGTM46To/s1qdOoY3SnK8rGOV9d/E2 1emOvG6OBCxpAjoH9uRXIwlvtVkcfWU6PNZ2PAiENM57PNZx+CGb7VChPdg3l7UH LGB0PP9cAqfG3OgDyXYbr5SmrA7eLdvlJcvZLBuwUx8qI2di6VoA5SQvVkoQG0Ix xw5Q3/Wq78Fi8xSAUgS6U25frihLiWClRxtQMiz0WwKPuGdiGx6XgVlGSEZdso7N 3uWVzQWoZMNqOkM5nRBSWxc6mjzKxOzRkbmJ7fgS4yTrNwpKeIZwUfzodztKqbO2 WTFR3+jKdpai8QfDSk/3KSred0IQDYuUFNTy2mLi7ladxnal1oONzwZbB+fAf/PL bl3tX93432j7+LknH9Y4qexzytXw1JWbcBxRXlM4QCyAx4gQnO3xcNRZucokW0y8 magEJzmZdchPGwos6tKrqgC7F39YdXbvh9jkCVt6eufyaUcVJJzFAx6SyAKPhwbi 6LhhOxWpbR9JLfgAY31Z =tnuX -----END PGP SIGNATURE----- _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
