[Mesa-dev] [WIP] i965/fs: Initial support for arb_gpu_shader_fp64
Ilia Mirkin
imirkin at alum.mit.edu
Thu Oct 16 06:50:44 PDT 2014
On Thu, Oct 16, 2014 at 8:24 AM, Topi Pohjolainen
<topi.pohjolainen at intel.com> wrote:
> Here is some basis for supporting double precision floats on i965 hw.
> On IVB this gives (details below):
>
> piglit-run.py --include-tests "ARB_gpu_shader_fp64" tests/all.py /tmp/foo
> [32/32] crash: 2, fail: 5, pass: 24, skip: 1
This should be more like 1K tests. Looks like somehow the generated
tests aren't getting picked up? You might try with "-t fp64".
$ ./piglit-run.py -t fp64 -d tests/all.py asdf
[2179/2179] dry-run: 2179
But only like half of those are execution tests... I usually just run
it with tests/gpu.py:
$ ./piglit-run.py -t fp64 -d tests/gpu.py asdf
[1102/1102] dry-run: 1102
-ilia
>
> This sits on top of Dave Airlie's and Ilia Mirkin's frontend patches.
>
> The only supported hardware for now is IVB although I have initial work
> to enable this on HSW and newer - it pretty much comes down to just how
> register regions are specified. I will submit that as follow-up. On IVB
> the regions are as if there are two packed floats while on newer they are
> natural and correspond to 64-bits.
>
> I've chosen to teach FS-LIR level (fs_visitor) to deal with 64-bit
> variables and augment hardware instruction emission (fs_generator and
> brw_eu) to output two instructions whenever double precision floats
> are involved. The hardware can deal with only half the number of channels
> when the channels are 64-bits wide - hence two instructions are needed.
>
> There are number of things that can be optimized - I've been mostly
> interested of creating safe basis for now.
>
> fp64/execution/built-in-functions/const-fma-double: pass
> fp64/execution/built-in-functions/fs-const-packDouble2x32: pass
> fp64/execution/built-in-functions/fs-unpackDouble2x32-2: pass
> fp64/preprocessor/define.vert: pass
> fp64/execution/built-in-functions/fs-const-unpackDouble2x32: pass
> fp64/compiler/implicit-conversions.vert: pass
> fp64/execution/built-in-functions/glsl-double-const-expr-vector-insert: pass
> fp64/execution/built-in-functions/fs-ldexp-dvec4: fail
>
> This actually works somewhat taking advantage of Ilia's lowering passes
> in glsl-ir. There are 8 passes in the test and the first six are fine.
> The last two with signs on doubles cause problems - I'm going to look
> into this next.
>
> fp64/execution/built-in-functions/fs-packDouble2x32: pass
> fp64/preprocessor/fs-output-double.frag: pass
> fp64/execution/built-in-functions/fs-frexp-dvec4: fail
> fp64/compiler/double-loop-iterator.vert: pass
> fp64/execution/built-in-functions/glsl-double-conversion-constructor-02: pass
> fp64/execution/built-in-functions/glsl-double-conversion-constructor-01: pass
> fp64/execution/glsl-uniform-initializer-7: pass
> fp64/execution/glsl-uniform-initializer-6: pass
> fp64/execution/glsl-uniform-initializer-5: pass
> fp64/execution/glsl-uniform-initializer-4: fail
>
> Here we have a multiplication of a matrix with a vector. Something
> in my todo list.
>
> fp64/execution/glsl-uniform-initializer-3: pass
> fp64/execution/glsl-uniform-initializer-2: pass
> fp64/execution/glsl-uniform-initializer-1: pass
> fp64/execution/glsl-uniform-initializer-8: pass
> fp64/execution/built-in-functions/fs-fma-double: crash
> fp64/execution/gs-fs-vs-double: crash
>
> These two are simply lacking support for now.
>
> fp64/preprocessor/define.frag: pass
> fp64/execution/built-in-functions/fs-const-ldexp-double: pass
> fp64/execution/built-in-functions/glsl-double-const-expr-vector-extract: pass
> fp64/execution/vs-out-fs-in-double: fail
> fp64/preprocessor/vs-input-double.vert: pass
> fp64/execution/built-in-functions/fs-trunc-double-large: fail
> fp64/execution/built-in-functions/fs-modf-double: skip
> fp64/execution/built-in-functions/fs-unpackDouble2x32: pass
>
>
> Topi Pohjolainen (25):
> i965: Lower DFRACEXP/DLDEXP
> mesa: Teach uniform update to take into account double precision
> i965: Determine size of double precision float register
> i965: Tell backend register about double precision type
> i965/fs: Prepare virtual registers for double precision floats
> i965/fs: Take double float into account in register offsets
> i965/fs: Prepare live interval analysis for double precision
> i965/fs: Add support for double precision uniform loading
> i965/fs: Generator support for converting double to float
> i965/fs: Double precision to single conversion support
> i965/fs: Prepare register allocator for double precision floats
> i965: Add helper telling if a register is scalar
> i965/fs: Add pack_double_2x32 virtual opcode
> i965/fs: Add support for ir_unop_pack_double_2x32
> i965/gen8: Add support for double precision constant operands
> i965/gen7: Add support for double precision constant operands
> i965/fs: Make generator to emit two instructions for double floats
> i965/fs: Generate two instructions for double precision comparison
> i965/fs: Collect results for double precision conditionals
> i965/gen7: Add support for loading double float scalars in 16-width
> i965/fs/gen7: Add generator support for loading double precision
> uniforms
> i965: Add helper telling if uniform is double and requires special
> load
> i965/fs: Lower double precision scalars into vectors
> i965/fs: Add unpack_double_2x32 virtual opcode
> i965/fs: Add support for ir_unop_unpack_double_2x32
>
> src/mesa/drivers/dri/i965/brw_defines.h | 6 +
> src/mesa/drivers/dri/i965/brw_eu.h | 4 +
> src/mesa/drivers/dri/i965/brw_eu_emit.c | 69 ++++++
> src/mesa/drivers/dri/i965/brw_fs.cpp | 79 ++++++-
> src/mesa/drivers/dri/i965/brw_fs.h | 24 ++-
> .../dri/i965/brw_fs_channel_expressions.cpp | 7 +-
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 235 ++++++++++++++++++++-
> src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 29 +++
> src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 102 ++++++++-
> src/mesa/drivers/dri/i965/brw_reg.h | 19 ++
> src/mesa/drivers/dri/i965/brw_shader.cpp | 42 +++-
> src/mesa/drivers/dri/i965/brw_shader.h | 2 +
> src/mesa/main/uniform_query.cpp | 2 +-
> 13 files changed, 595 insertions(+), 25 deletions(-)
>
> --
> 1.8.3.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list