[Mesa-dev] [PATCH] i965: Enable INTDIV in SIMD16 mode.
Matt Turner
mattst88 at gmail.com
Tue Aug 12 22:20:15 PDT 2014
On Tue, Aug 12, 2014 at 9:55 PM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> All we need to do is decompose this to two SIMD8 instructions, like we
> do in many other cases. We even already have code for that.
>
> I apparently just botched this last time I tried, and it was easy.
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 12 ------------
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 4 ++--
> 2 files changed, 2 insertions(+), 14 deletions(-)
>
> From looking at the docs, it appears that INTDIV doesn't support source
> modifiers...on any generation. I don't think we enforce that today...
>
> Passes Piglit on Haswell; I haven't tried other generations.
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 8405502..35ada42 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -1404,18 +1404,6 @@ fs_visitor::emit_math(enum opcode opcode, fs_reg dst, fs_reg src0, fs_reg src1)
> int base_mrf = 2;
> fs_inst *inst;
>
> - switch (opcode) {
> - case SHADER_OPCODE_INT_QUOTIENT:
> - case SHADER_OPCODE_INT_REMAINDER:
> - if (brw->gen >= 7)
> - no16("SIMD16 INTDIV unsupported\n");
> - break;
> - case SHADER_OPCODE_POW:
> - break;
> - default:
> - unreachable("not reached: unsupported binary math opcode.");
> - }
> -
> if (brw->gen >= 8) {
> inst = emit(opcode, dst, src0, src1);
> } else if (brw->gen >= 6) {
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index 9e260a7..1190f1f 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -1620,9 +1620,9 @@ fs_generator::generate_code(exec_list *instructions)
> case SHADER_OPCODE_INT_REMAINDER:
> case SHADER_OPCODE_POW:
> assert(brw->gen < 6 || inst->mlen == 0);
> - if (brw->gen >= 7) {
> + if (brw->gen >= 7 && inst->opcode == SHADER_OPCODE_POW) {
> gen6_math(p, dst, brw_math_function(inst->opcode), src[0], src[1]);
> - } else if (brw->gen == 6) {
> + } else if (brw->gen >= 6) {
> generate_math_gen6(inst, dst, src[0], src[1]);
> } else {
> generate_math_gen4(inst, dst, src[0]);
> --
I'd completely forgotten that Sandybridge can't do compressed math instructions.
Reviewed-by: Matt Turner <mattst88 at gmail.com>
More information about the mesa-dev
mailing list