Mesa (master): uti/u_atomic: Don't test p_atomic_add with booleans.
Module: Mesa Branch: master Commit: b09f25428ff5e908aefc03b8f9931599c3afd6d2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b09f25428ff5e908aefc03b8f9931599c3afd6d2 Author: Jose Fonseca jfons...@vmware.com Date: Fri Feb 13 09:46:44 2015 + uti/u_atomic: Don't test p_atomic_add with booleans. Add another class of tests. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=89112 I failed to spot this in my previous change, because bool was a typedef for char on the system I tested. Reviewed-by: Roland Scheidegger srol...@vmware.com --- src/util/u_atomic_test.c | 25 +++-- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/util/u_atomic_test.c b/src/util/u_atomic_test.c index 8bddf8d..939cfe4 100644 --- a/src/util/u_atomic_test.c +++ b/src/util/u_atomic_test.c @@ -37,9 +37,9 @@ #include u_atomic.h -/* Test operations that are supported for all types, including 8 bits types */ -#define test_atomic_8bits(type, ones) \ - static void test_atomic_8bits_##type (void) { \ +/* Test only assignment-like operations, which are supported on all types */ +#define test_atomic_assign(type, ones) \ + static void test_atomic_assign_##type (void) { \ type v, r; \ \ p_atomic_set(v, ones); \ @@ -56,6 +56,19 @@ assert(v == 0 p_atomic_cmpxchg); \ assert(r == ones p_atomic_cmpxchg); \ \ + (void) r; \ + } + + +/* Test arithmetic operations that are supported on 8 bits integer types */ +#define test_atomic_8bits(type, ones) \ + test_atomic_assign(type, ones) \ + \ + static void test_atomic_8bits_##type (void) { \ + type v, r; \ + \ + test_atomic_assign_##type(); \ + \ v = 23; \ p_atomic_add(v, 42); \ r = p_atomic_read(v); \ @@ -65,7 +78,7 @@ } -/* Test operations that are not supported for 8 bits types */ +/* Test all operations */ #define test_atomic(type, ones) \ test_atomic_8bits(type, ones) \ \ @@ -121,7 +134,7 @@ test_atomic(uint64_t, UINT64_C(0x)) test_atomic_8bits(int8_t, INT8_C(-1)) test_atomic_8bits(uint8_t, UINT8_C(0xff)) -test_atomic_8bits(bool, true) +test_atomic_assign(bool, true) int main() @@ -138,7 +151,7 @@ main() test_atomic_8bits_int8_t(); test_atomic_8bits_uint8_t(); - test_atomic_8bits_bool(); + test_atomic_assign_bool(); return 0; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): os,llvmpipe: Set rasterizer thread names on Linux.
Module: Mesa Branch: master Commit: c944b91190048e370d2adc362f0860d9f58e58f2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c944b91190048e370d2adc362f0860d9f58e58f2 Author: Jose Fonseca jfons...@vmware.com Date: Fri Feb 13 13:51:28 2015 + os,llvmpipe: Set rasterizer thread names on Linux. To help identify llvmpipe rasterizer threads -- especially when there can be so many. We can eventually generalize this to other OSes, but for that we must restrict the function to be called from the current thread. See also http://stackoverflow.com/a/7989973 Reviewed-by: Roland Scheidegger srol...@vmware.com --- src/gallium/auxiliary/os/os_thread.h | 11 +++ src/gallium/drivers/llvmpipe/lp_rast.c |8 +++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/gallium/auxiliary/os/os_thread.h b/src/gallium/auxiliary/os/os_thread.h index ff46a89..e9da895 100644 --- a/src/gallium/auxiliary/os/os_thread.h +++ b/src/gallium/auxiliary/os/os_thread.h @@ -85,6 +85,17 @@ static INLINE int pipe_thread_destroy( pipe_thread thread ) return thrd_detach( thread ); } +static INLINE void pipe_thread_setname( const char *name ) +{ +#if defined(HAVE_PTHREAD) +# if defined(__GNU_LIBRARY__) defined(__GLIBC__) defined(__GLIBC_MINOR__) \ + (__GLIBC__ = 3 || (__GLIBC__ == 2 __GLIBC_MINOR__ = 12)) + pthread_setname_np(pthread_self(), name); +# endif +#endif + (void)name; +} + /* pipe_mutex */ diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c index e168766..903e7c5 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.c +++ b/src/gallium/drivers/llvmpipe/lp_rast.c @@ -31,6 +31,7 @@ #include util/u_rect.h #include util/u_surface.h #include util/u_pack_color.h +#include util/u_string.h #include os/os_time.h @@ -747,11 +748,16 @@ static PIPE_THREAD_ROUTINE( thread_function, init_data ) struct lp_rasterizer_task *task = (struct lp_rasterizer_task *) init_data; struct lp_rasterizer *rast = task-rast; boolean debug = false; - unsigned fpstate = util_fpstate_get(); + char thread_name[16]; + unsigned fpstate; + + util_snprintf(thread_name, sizeof thread_name, llvmpipe-%u, task-thread_index); + pipe_thread_setname(thread_name); /* Make sure that denorms are treated like zeros. This is * the behavior required by D3D10. OpenGL doesn't care. */ + fpstate = util_fpstate_get(); util_fpstate_set_denorms_to_zero(fpstate); while (1) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: fix rectlist length on Gen8
Module: Mesa Branch: master Commit: 8b9446dbeb6bc146b92a17b8d44e39fcf2f96e97 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8b9446dbeb6bc146b92a17b8d44e39fcf2f96e97 Author: Chia-I Wu olva...@gmail.com Date: Fri Feb 13 03:59:45 2015 +0800 ilo: fix rectlist length on Gen8 5 PIPE_CONTROLs, 2 3DSTATE_WM_HZ_OP, and depth buffer setup require 65 DWords. --- src/gallium/drivers/ilo/ilo_render_gen8.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/drivers/ilo/ilo_render_gen8.c b/src/gallium/drivers/ilo/ilo_render_gen8.c index 4e2887e..6b14373 100644 --- a/src/gallium/drivers/ilo/ilo_render_gen8.c +++ b/src/gallium/drivers/ilo/ilo_render_gen8.c @@ -399,7 +399,7 @@ ilo_render_get_rectlist_commands_len_gen8(const struct ilo_render *render, { ILO_DEV_ASSERT(render-dev, 8, 8); - return 64; + return 96; } void ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: prepare for 64-bit immediates decoding
Module: Mesa Branch: master Commit: f8126fed954977604697f3c6485a6701618458cb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8126fed954977604697f3c6485a6701618458cb Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 03:05:47 2015 +0800 ilo: prepare for 64-bit immediates decoding Replace imm32 by imm64. Add more ways (UD, D, etc) to access the immediate. --- .../drivers/ilo/shader/toy_compiler_disasm.c | 46 +--- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c index 4c490f1..654a611 100644 --- a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c +++ b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c @@ -106,7 +106,18 @@ struct disasm_inst { struct disasm_src_operand src1; union { struct disasm_src_operand src2; - uint32_t imm32; + uint64_t imm64; + + uint32_t ud; + int32_t d; + uint16_t uw; + int16_t w; + float f; + + struct { + int16_t jip; + int16_t uip; + } ip16; } u; }; @@ -382,7 +393,7 @@ disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1) disasm_inst_decode_dw1_low_gen6(inst, dw1); if (disasm_inst_jip_in_dw1_high_gen6(inst)) - inst-u.imm32 = dw1 16; + inst-u.imm64 = dw1 16; else disasm_inst_decode_dw1_high_gen6(inst, dw1); } @@ -408,7 +419,7 @@ disasm_inst_decode_dw2_dw3_gen6(struct disasm_inst *inst, inst-src1.base.file == GEN6_FILE_IMM) { count = 1; if (!disasm_inst_jip_in_dw1_high_gen6(inst)) - inst-u.imm32 = dw3; + inst-u.imm64 = dw3; } else { count = 2; } @@ -913,9 +924,11 @@ disasm_inst_cmpt_ctrl(const struct disasm_inst *inst) static const char * disasm_inst_eot(const struct disasm_inst *inst) { + const uint32_t mdesc = inst-u.ud; + if (inst-opcode == GEN6_OPCODE_SEND || inst-opcode == GEN6_OPCODE_SENDC) - return (inst-u.imm32 GEN6_MSG_EOT) ? EOT : ; + return (mdesc GEN6_MSG_EOT) ? EOT : ; else return ; } @@ -1460,28 +1473,28 @@ disasm_printer_add_operand(struct disasm_printer *printer, if (operand-file == GEN6_FILE_IMM) { switch (operand-type) { case GEN6_TYPE_UD: - disasm_printer_add(printer, 0x%08xUD, inst-u.imm32); + disasm_printer_add(printer, 0x%08xUD, inst-u.ud); break; case GEN6_TYPE_D: - disasm_printer_add(printer, %dD, inst-u.imm32); + disasm_printer_add(printer, %dD, inst-u.d); break; case GEN6_TYPE_UW: - disasm_printer_add(printer, 0x%04xUW, (uint16_t) inst-u.imm32); + disasm_printer_add(printer, 0x%04xUW, inst-u.uw); break; case GEN6_TYPE_W: - disasm_printer_add(printer, %dW, (int16_t) inst-u.imm32); + disasm_printer_add(printer, %dW, inst-u.w); break; case GEN6_TYPE_UV_IMM: - disasm_printer_add(printer, 0x%08xUV, inst-u.imm32); + disasm_printer_add(printer, 0x%08xUV, inst-u.ud); break; case GEN6_TYPE_VF_IMM: disasm_printer_add(printer, Vector Float); break; case GEN6_TYPE_V_IMM: - disasm_printer_add(printer, 0x%08xV, inst-u.imm32); + disasm_printer_add(printer, 0x%08xV, inst-u.ud); break; case GEN6_TYPE_F: - disasm_printer_add(printer, %-gF, uif(inst-u.imm32)); + disasm_printer_add(printer, %-gF, uif(inst-u.f)); break; default: disasm_printer_add(printer, BAD); @@ -1794,7 +1807,7 @@ static void disasm_printer_add_mdesc(struct disasm_printer *printer, const struct disasm_inst *inst) { - const uint32_t mdesc = inst-u.imm32; + const uint32_t mdesc = inst-u.ud; assert(inst-opcode == GEN6_OPCODE_SEND || inst-opcode == GEN6_OPCODE_SENDC); @@ -1848,14 +1861,17 @@ disasm_printer_print_inst(struct disasm_printer *printer, if (inst-has_jip || inst-has_uip) { if (inst-has_jip) { + const int32_t jip = inst-u.ip16.jip; + disasm_printer_column(printer, col++); - disasm_printer_add(printer, JIP: %d, (int16_t) inst-u.imm32); + disasm_printer_add(printer, JIP: %d, jip); } if (inst-has_uip) { + const int32_t uip = inst-u.ip16.uip; + disasm_printer_column(printer, col++); - disasm_printer_add(printer, UIP: %d, - (int16_t) (inst-u.imm32 16)); + disasm_printer_add(printer, UIP: %d, uip); } } else { const int src_count = disasm_opcode_table[inst-opcode].src_count; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: cleanup ISA DW0 decoding
Module: Mesa Branch: master Commit: db362983d17ea1403e6121ce80f05df141a11aa5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=db362983d17ea1403e6121ce80f05df141a11aa5 Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 02:18:55 2015 +0800 ilo: cleanup ISA DW0 decoding Add disasm_inst_decode_dw0_opcode_gen6() to decode the opcode. Simplify branch_ctrl/acc_wr_ctrl decoding. --- .../drivers/ilo/shader/toy_compiler_disasm.c | 26 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c index 1434736..76b2699 100644 --- a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c +++ b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c @@ -184,7 +184,7 @@ static const struct { }; static void -disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0) +disasm_inst_decode_dw0_opcode_gen6(struct disasm_inst *inst, uint32_t dw0) { ILO_DEV_ASSERT(inst-dev, 6, 8); @@ -218,6 +218,14 @@ disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0) default: break; } +} + +static void +disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0) +{ + ILO_DEV_ASSERT(inst-dev, 6, 8); + + disasm_inst_decode_dw0_opcode_gen6(inst, dw0); inst-access_mode = GEN_EXTRACT(dw0, GEN6_INST_ACCESSMODE); @@ -250,19 +258,17 @@ disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0) break; } - if (ilo_dev_gen(inst-dev) = ILO_GEN(8)) { - switch (inst-opcode) { - case GEN6_OPCODE_IF: - case GEN6_OPCODE_ELSE: - case GEN8_OPCODE_GOTO: + switch (inst-opcode) { + case GEN6_OPCODE_IF: + case GEN6_OPCODE_ELSE: + case GEN8_OPCODE_GOTO: + if (ilo_dev_gen(inst-dev) = ILO_GEN(8)) { inst-branch_ctrl = (bool) (dw0 GEN8_INST_BRANCHCTRL); break; - default: - inst-acc_wr_ctrl = (bool) (dw0 GEN6_INST_ACCWRCTRL); - break; } - } else { + default: inst-acc_wr_ctrl = (bool) (dw0 GEN6_INST_ACCWRCTRL); + break; } inst-cmpt_ctrl = (bool) (dw0 GEN6_INST_CMPTCTRL); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: correct ISA UIP/JIP decoding for Gen8
Module: Mesa Branch: master Commit: 7504b357d45d5c814bd8d4511bf42a8c04c8af63 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7504b357d45d5c814bd8d4511bf42a8c04c8af63 Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 03:07:51 2015 +0800 ilo: correct ISA UIP/JIP decoding for Gen8 JIP is int32_t and UIP is in DW2 on Gen8. --- .../drivers/ilo/shader/toy_compiler_disasm.c | 57 +--- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c index 654a611..8ec348b 100644 --- a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c +++ b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c @@ -118,6 +118,11 @@ struct disasm_inst { int16_t jip; int16_t uip; } ip16; + + struct { + int32_t jip; + int32_t uip; + } ip32; } u; }; @@ -287,13 +292,6 @@ disasm_inst_decode_dw0_gen6(struct disasm_inst *inst, uint32_t dw0) inst-saturate = (bool) (dw0 GEN6_INST_SATURATE); } -static bool -disasm_inst_jip_in_dw1_high_gen6(const struct disasm_inst *inst) -{ - return (ilo_dev_gen(inst-dev) == ILO_GEN(6) - inst-has_jip !inst-has_uip); -} - static void disasm_inst_decode_dw1_low_gen6(struct disasm_inst *inst, uint32_t dw1) { @@ -392,7 +390,8 @@ disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1) else disasm_inst_decode_dw1_low_gen6(inst, dw1); - if (disasm_inst_jip_in_dw1_high_gen6(inst)) + if (ilo_dev_gen(inst-dev) == ILO_GEN(6) + inst-has_jip !inst-has_uip) inst-u.imm64 = dw1 16; else disasm_inst_decode_dw1_high_gen6(inst, dw1); @@ -402,26 +401,46 @@ static void disasm_inst_decode_dw2_dw3_gen6(struct disasm_inst *inst, uint32_t dw2, uint32_t dw3) { - int count, i; + int imm_bits = 0, count, i; ILO_DEV_ASSERT(inst-dev, 6, 8); if (ilo_dev_gen(inst-dev) = ILO_GEN(8)) { - inst-src1.base.file = GEN_EXTRACT(dw2, GEN8_INST_SRC1_FILE); - inst-src1.base.type = GEN_EXTRACT(dw2, GEN8_INST_SRC1_TYPE); + /* how about real 64-bit immediates? */ + if (inst-has_uip) { + imm_bits = 64; + inst-src1.base.file = GEN6_FILE_IMM; + inst-src1.base.type = GEN6_TYPE_D; + } else { + inst-src1.base.file = GEN_EXTRACT(dw2, GEN8_INST_SRC1_FILE); + inst-src1.base.type = GEN_EXTRACT(dw2, GEN8_INST_SRC1_TYPE); + + if (inst-src0.base.file == GEN6_FILE_IMM || + inst-src1.base.file == GEN6_FILE_IMM) +imm_bits = 32; + } } else { if (ilo_dev_gen(inst-dev) = ILO_GEN(7)) inst-flag_reg = GEN_EXTRACT(dw2, GEN7_INST_FLAG_REG); inst-flag_subreg = GEN_EXTRACT(dw2, GEN6_INST_FLAG_SUBREG); + + if (inst-src0.base.file == GEN6_FILE_IMM || + inst-src1.base.file == GEN6_FILE_IMM) + imm_bits = 32; } - if (inst-src0.base.file == GEN6_FILE_IMM || - inst-src1.base.file == GEN6_FILE_IMM) { + switch (imm_bits) { + case 32: + inst-u.imm64 = dw3; count = 1; - if (!disasm_inst_jip_in_dw1_high_gen6(inst)) - inst-u.imm64 = dw3; - } else { + break; + case 64: + inst-u.imm64 = (uint64_t) dw2 32 | dw3; + count = 0; + break; + default: count = 2; + break; } for (i = 0; i count; i++) { @@ -1861,14 +1880,16 @@ disasm_printer_print_inst(struct disasm_printer *printer, if (inst-has_jip || inst-has_uip) { if (inst-has_jip) { - const int32_t jip = inst-u.ip16.jip; + const int32_t jip = (ilo_dev_gen(inst-dev) = ILO_GEN(8)) ? +inst-u.ip32.jip : inst-u.ip16.jip; disasm_printer_column(printer, col++); disasm_printer_add(printer, JIP: %d, jip); } if (inst-has_uip) { - const int32_t uip = inst-u.ip16.uip; + const int32_t uip = (ilo_dev_gen(inst-dev) = ILO_GEN(8)) ? +inst-u.ip32.uip : inst-u.ip16.uip; disasm_printer_column(printer, col++); disasm_printer_add(printer, UIP: %d, uip); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: cleanup ISA DW1 decoding
Module: Mesa Branch: master Commit: 9ed376a76c37755f4408aa5cdb754178143f804f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9ed376a76c37755f4408aa5cdb754178143f804f Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 02:23:53 2015 +0800 ilo: cleanup ISA DW1 decoding Decode the higher and lower 16 bits separately. --- .../drivers/ilo/shader/toy_compiler_disasm.c | 89 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c index 76b2699..4c490f1 100644 --- a/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c +++ b/src/gallium/drivers/ilo/shader/toy_compiler_disasm.c @@ -284,35 +284,43 @@ disasm_inst_jip_in_dw1_high_gen6(const struct disasm_inst *inst) } static void -disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1) +disasm_inst_decode_dw1_low_gen6(struct disasm_inst *inst, uint32_t dw1) { - ILO_DEV_ASSERT(inst-dev, 6, 8); + ILO_DEV_ASSERT(inst-dev, 6, 7.5); - if (ilo_dev_gen(inst-dev) = ILO_GEN(8)) { - inst-flag_subreg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_SUBREG); - inst-flag_reg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_REG); - inst-mask_ctrl = GEN_EXTRACT(dw1, GEN8_INST_MASKCTRL); - - inst-dst.base.file = GEN_EXTRACT(dw1, GEN8_INST_DST_FILE); - inst-dst.base.type = GEN_EXTRACT(dw1, GEN8_INST_DST_TYPE); - inst-src0.base.file = GEN_EXTRACT(dw1, GEN8_INST_SRC0_FILE); - inst-src0.base.type = GEN_EXTRACT(dw1, GEN8_INST_SRC0_TYPE); - } else { - inst-dst.base.file = GEN_EXTRACT(dw1, GEN6_INST_DST_FILE); - inst-dst.base.type = GEN_EXTRACT(dw1, GEN6_INST_DST_TYPE); - inst-src0.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC0_FILE); - inst-src0.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC0_TYPE); - inst-src1.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC1_FILE); - inst-src1.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC1_TYPE); + inst-dst.base.file = GEN_EXTRACT(dw1, GEN6_INST_DST_FILE); + inst-dst.base.type = GEN_EXTRACT(dw1, GEN6_INST_DST_TYPE); + inst-src0.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC0_FILE); + inst-src0.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC0_TYPE); + inst-src1.base.file = GEN_EXTRACT(dw1, GEN6_INST_SRC1_FILE); + inst-src1.base.type = GEN_EXTRACT(dw1, GEN6_INST_SRC1_TYPE); - if (ilo_dev_gen(inst-dev) = ILO_GEN(7)) - inst-nib_ctrl = (bool) (dw1 GEN7_INST_NIBCTRL); - } + if (ilo_dev_gen(inst-dev) = ILO_GEN(7)) + inst-nib_ctrl = (bool) (dw1 GEN7_INST_NIBCTRL); +} - if (disasm_inst_jip_in_dw1_high_gen6(inst)) { - inst-u.imm32 = dw1 16; - return; - } +static void +disasm_inst_decode_dw1_low_gen8(struct disasm_inst *inst, uint32_t dw1) +{ + ILO_DEV_ASSERT(inst-dev, 8, 8); + + inst-flag_subreg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_SUBREG); + inst-flag_reg = GEN_EXTRACT(dw1, GEN8_INST_FLAG_REG); + inst-mask_ctrl = GEN_EXTRACT(dw1, GEN8_INST_MASKCTRL); + + inst-dst.base.file = GEN_EXTRACT(dw1, GEN8_INST_DST_FILE); + inst-dst.base.type = GEN_EXTRACT(dw1, GEN8_INST_DST_TYPE); + inst-src0.base.file = GEN_EXTRACT(dw1, GEN8_INST_SRC0_FILE); + inst-src0.base.type = GEN_EXTRACT(dw1, GEN8_INST_SRC0_TYPE); + + inst-dst.base.addr_imm = GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM_BIT9) + GEN8_INST_DST_ADDR_IMM_BIT9__SHR; +} + +static void +disasm_inst_decode_dw1_high_gen6(struct disasm_inst *inst, uint32_t dw1) +{ + ILO_DEV_ASSERT(inst-dev, 6, 8); inst-dst.base.addr_mode = GEN_EXTRACT(dw1, GEN6_INST_DST_ADDRMODE); @@ -331,18 +339,15 @@ disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1) inst-dst.base.addr_subreg = GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_SUBREG); + /* bit 9 is already set in disasm_inst_decode_dw1_low_gen8() */ if (inst-access_mode == GEN6_ALIGN_1) { -inst-dst.base.addr_imm = +inst-dst.base.addr_imm |= GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM); } else { -inst-dst.base.addr_imm = GEN_EXTRACT(dw1, - GEN8_INST_DST_ADDR_IMM_ALIGN16) +inst-dst.base.addr_imm |= + GEN_EXTRACT(dw1, GEN8_INST_DST_ADDR_IMM_ALIGN16) GEN8_INST_DST_ADDR_IMM_ALIGN16__SHR; } - - inst-dst.base.addr_imm |= GEN_EXTRACT(dw1, - GEN8_INST_DST_ADDR_IMM_BIT9) -GEN8_INST_DST_ADDR_IMM_BIT9__SHR; } else { inst-dst.base.addr_subreg = GEN_EXTRACT(dw1, GEN6_INST_DST_ADDR_SUBREG); @@ -351,8 +356,8 @@ disasm_inst_decode_dw1_gen6(struct disasm_inst *inst, uint32_t dw1) inst-dst.base.addr_imm = GEN_EXTRACT(dw1, GEN6_INST_DST_ADDR_IMM); } else { -inst-dst.base.addr_imm = GEN_EXTRACT(dw1, - GEN6_INST_DST_ADDR_IMM_ALIGN16) +inst-dst.base.addr_imm = + GEN_EXTRACT(dw1,
Mesa (master): ilo: do not set GEN6_THREADCTRL_SWITCH
Module: Mesa Branch: master Commit: c62507f42cf7ea8ce3c3b843f488c6efd26f17dc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c62507f42cf7ea8ce3c3b843f488c6efd26f17dc Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 06:25:27 2015 +0800 ilo: do not set GEN6_THREADCTRL_SWITCH It is not needed on Gen6+, and it appears to be broken on Gen8. --- src/gallium/drivers/ilo/shader/toy_legalize.c |4 1 file changed, 4 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_legalize.c b/src/gallium/drivers/ilo/shader/toy_legalize.c index b949d35..f1bacbd 100644 --- a/src/gallium/drivers/ilo/shader/toy_legalize.c +++ b/src/gallium/drivers/ilo/shader/toy_legalize.c @@ -397,8 +397,6 @@ patch_if_else_jip(struct toy_compiler *tc, struct toy_inst *inst) else { inst-dst = tdst_imm_w(jip); } - - inst-thread_ctrl = GEN6_THREADCTRL_SWITCH; } static void @@ -437,8 +435,6 @@ patch_endif_jip(struct toy_compiler *tc, struct toy_inst *inst) inst-src[1] = tsrc_imm_w(dist * 2); else inst-dst = tdst_imm_w(dist * 2); - - inst-thread_ctrl = GEN6_THREADCTRL_SWITCH; } static void ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: fix JIP/UIP on Gen8
Module: Mesa Branch: master Commit: 8323796840a343ee39687cc8e8b424ee43d6fee7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8323796840a343ee39687cc8e8b424ee43d6fee7 Author: Chia-I Wu olva...@gmail.com Date: Sat Feb 14 06:28:12 2015 +0800 ilo: fix JIP/UIP on Gen8 UIP is in DW2 and JIP is in DW3 on Gen8. Also, the units are in bytes. --- src/gallium/drivers/ilo/shader/toy_compiler_asm.c |8 +-- src/gallium/drivers/ilo/shader/toy_legalize.c | 26 +++-- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/ilo/shader/toy_compiler_asm.c b/src/gallium/drivers/ilo/shader/toy_compiler_asm.c index 0977d60..1f465a3 100644 --- a/src/gallium/drivers/ilo/shader/toy_compiler_asm.c +++ b/src/gallium/drivers/ilo/shader/toy_compiler_asm.c @@ -444,8 +444,12 @@ translate_src_gen6(const struct codegen *cg, int idx) /* special treatment may be needed if any of the operand is immediate */ if (cg-src[0].file == GEN6_FILE_IMM) { assert(!cg-src[0].absolute !cg-src[0].negate); - /* only the last src operand can be an immediate */ - assert(src_is_null(cg, 1)); + + /* only the last src operand can be an immediate unless it is Gen8+ */ + assert(ilo_dev_gen(cg-dev) = ILO_GEN(8) || src_is_null(cg, 1)); + + if (!src_is_null(cg, 1)) + return cg-src[idx].origin; if (idx == 0) { if (ilo_dev_gen(cg-dev) = ILO_GEN(8)) { diff --git a/src/gallium/drivers/ilo/shader/toy_legalize.c b/src/gallium/drivers/ilo/shader/toy_legalize.c index f1bacbd..4e573ca 100644 --- a/src/gallium/drivers/ilo/shader/toy_legalize.c +++ b/src/gallium/drivers/ilo/shader/toy_legalize.c @@ -335,7 +335,9 @@ patch_while_jip(struct toy_compiler *tc, struct toy_inst *inst) dist--; } - if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) + if (ilo_dev_gen(tc-dev) = ILO_GEN(8)) + inst-src[1] = tsrc_imm_d(dist * 16); + else if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) inst-src[1] = tsrc_imm_w(dist * 2); else inst-dst = tdst_imm_w(dist * 2); @@ -388,13 +390,16 @@ patch_if_else_jip(struct toy_compiler *tc, struct toy_inst *inst) dist++; } - if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) { + if (ilo_dev_gen(tc-dev) = ILO_GEN(8)) { + inst-dst.type = TOY_TYPE_D; + inst-src[0] = tsrc_imm_d(uip * 8); + inst-src[1] = tsrc_imm_d(jip * 8); + } else if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) { /* what should the type be? */ inst-dst.type = TOY_TYPE_D; inst-src[0].type = TOY_TYPE_D; inst-src[1] = tsrc_imm_d(uip 16 | jip); - } - else { + } else { inst-dst = tdst_imm_w(jip); } } @@ -431,7 +436,9 @@ patch_endif_jip(struct toy_compiler *tc, struct toy_inst *inst) if (!found) dist = 1; - if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) + if (ilo_dev_gen(tc-dev) = ILO_GEN(8)) + inst-src[1] = tsrc_imm_d(dist * 16); + else if (ilo_dev_gen(tc-dev) = ILO_GEN(7)) inst-src[1] = tsrc_imm_w(dist * 2); else inst-dst = tdst_imm_w(dist * 2); @@ -495,8 +502,13 @@ patch_break_continue_jip(struct toy_compiler *tc, struct toy_inst *inst) /* should the type be D or W? */ inst-dst.type = TOY_TYPE_D; - inst-src[0].type = TOY_TYPE_D; - inst-src[1] = tsrc_imm_d(uip 16 | jip); + if (ilo_dev_gen(tc-dev) = ILO_GEN(8)) { + inst-src[0] = tsrc_imm_d(uip * 8); + inst-src[1] = tsrc_imm_d(jip * 8); + } else { + inst-src[0].type = TOY_TYPE_D; + inst-src[1] = tsrc_imm_d(uip 16 | jip); + } } /** ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: update some outdated gen checks
Module: Mesa Branch: master Commit: 5fc0dd8953012c5f4864b40d89983f6d44985dc1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5fc0dd8953012c5f4864b40d89983f6d44985dc1 Author: Chia-I Wu olva...@gmail.com Date: Fri Feb 13 04:04:18 2015 +0800 ilo: update some outdated gen checks Update gen checks for 3DSTATE_POLY_STIPPLE_OFFSET, 3DSTATE_POLY_STIPPLE_PATTERN, 3DSTATE_LINE_STIPPLE, and 3DSTATE_AA_LINE_PARAMETERS. --- src/gallium/drivers/ilo/ilo_builder_3d_bottom.h |8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h b/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h index a5cc789..20b23da 100644 --- a/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h +++ b/src/gallium/drivers/ilo/ilo_builder_3d_bottom.h @@ -1070,7 +1070,7 @@ gen6_3DSTATE_POLY_STIPPLE_OFFSET(struct ilo_builder *builder, const uint8_t cmd_len = 2; uint32_t *dw; - ILO_DEV_ASSERT(builder-dev, 6, 7.5); + ILO_DEV_ASSERT(builder-dev, 6, 8); assert(x_offset = 0 x_offset = 31); assert(y_offset = 0 y_offset = 31); @@ -1089,7 +1089,7 @@ gen6_3DSTATE_POLY_STIPPLE_PATTERN(struct ilo_builder *builder, uint32_t *dw; int i; - ILO_DEV_ASSERT(builder-dev, 6, 7.5); + ILO_DEV_ASSERT(builder-dev, 6, 8); ilo_builder_batch_pointer(builder, cmd_len, dw); @@ -1109,7 +1109,7 @@ gen6_3DSTATE_LINE_STIPPLE(struct ilo_builder *builder, unsigned inverse; uint32_t *dw; - ILO_DEV_ASSERT(builder-dev, 6, 7.5); + ILO_DEV_ASSERT(builder-dev, 6, 8); assert((pattern 0x) == pattern); assert(factor = 1 factor = 256); @@ -1145,7 +1145,7 @@ gen6_3DSTATE_AA_LINE_PARAMETERS(struct ilo_builder *builder) 0 GEN6_AA_LINE_DW2_CAP_BIAS__SHIFT | 0, }; - ILO_DEV_ASSERT(builder-dev, 6, 7.5); + ILO_DEV_ASSERT(builder-dev, 6, 8); ilo_builder_batch_write(builder, cmd_len, dw); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ilo: fix 3DSTATE_VF_TOPOLOGY
Module: Mesa Branch: master Commit: baba8b2745e0036dbac0350a344bb86278fdb673 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=baba8b2745e0036dbac0350a344bb86278fdb673 Author: Chia-I Wu olva...@gmail.com Date: Fri Feb 13 03:54:32 2015 +0800 ilo: fix 3DSTATE_VF_TOPOLOGY The pipe primitive type was wrongly translated twice. --- src/gallium/drivers/ilo/ilo_render_gen8.c |3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gallium/drivers/ilo/ilo_render_gen8.c b/src/gallium/drivers/ilo/ilo_render_gen8.c index 54c0e20..4e2887e 100644 --- a/src/gallium/drivers/ilo/ilo_render_gen8.c +++ b/src/gallium/drivers/ilo/ilo_render_gen8.c @@ -257,7 +257,6 @@ gen8_draw_vf(struct ilo_render *r, const struct ilo_state_vector *vec, struct ilo_render_draw_session *session) { - const int prim = gen6_3d_translate_pipe_prim(vec-draw-mode); int i; /* 3DSTATE_INDEX_BUFFER */ @@ -278,7 +277,7 @@ gen8_draw_vf(struct ilo_render *r, if (DIRTY(VE)) gen6_3DSTATE_VERTEX_ELEMENTS(r-builder, vec-ve); - gen8_3DSTATE_VF_TOPOLOGY(r-builder, prim); + gen8_3DSTATE_VF_TOPOLOGY(r-builder, vec-draw-mode); for (i = 0; i vec-ve-vb_count; i++) { gen8_3DSTATE_VF_INSTANCING(r-builder, i, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Demos (master): line-sample: a new test that draws a sample of wide/ stipple/smooth lines
Module: Demos Branch: master Commit: c8f52a8ea41264ae1963a89bd6f0ff2fd646d862 URL: http://cgit.freedesktop.org/mesa/demos/commit/?id=c8f52a8ea41264ae1963a89bd6f0ff2fd646d862 Author: Brian Paul bri...@vmware.com Date: Fri Feb 13 17:59:40 2015 -0700 line-sample: a new test that draws a sample of wide/stipple/smooth lines --- src/tests/CMakeLists.txt |1 + src/tests/Makefile.am|1 + src/tests/line-sample.c | 187 ++ 3 files changed, 189 insertions(+) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index fe2c24b..5b4fb23 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -73,6 +73,7 @@ set (targets invert lineclip linehacks + line-sample manytex mapbufrange minmag diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index 8f40799..678295a 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -103,6 +103,7 @@ noinst_PROGRAMS = \ jkrahntest \ lineclip \ linehacks \ + line-sample \ manytex \ mapbufrange \ minmag \ diff --git a/src/tests/line-sample.c b/src/tests/line-sample.c new file mode 100644 index 000..d577d23 --- /dev/null +++ b/src/tests/line-sample.c @@ -0,0 +1,187 @@ +/* + * Draw samples of wide lines, smooth lines and stippled lines in + * all combinations. + * + * Brian Paul + * 13 Feb 2015 + */ + + +#include math.h +#include stdio.h +#include string.h +#include stdlib.h +#include glut_wrap.h + + +static int w, h; +static float g, lw = 3.0; + + +static void +draw_line_sample(GLboolean smooth, GLboolean stipple, GLfloat width) +{ + float r0 = 0.4; + float r1 = 0.8; + float r2 = 0.9; + float r3 = 0.95; + int i; + + glLineWidth(width); + + if (stipple) { + glEnable(GL_LINE_STIPPLE); + } + else { + glDisable(GL_LINE_STIPPLE); + } + + if (smooth) { + glEnable(GL_LINE_SMOOTH); + glEnable(GL_BLEND); +} + else { + glDisable(GL_LINE_SMOOTH); + glDisable(GL_BLEND); + } + + /* spokes */ + glBegin(GL_LINES); + for (i = 0; i 360; i += 10) { + float x0 = r0 * cos(i * M_PI / 180.0); + float y0 = r0 * sin(i * M_PI / 180.0); + float x1 = r1 * cos(i * M_PI / 180.0); + float y1 = r1 * sin(i * M_PI / 180.0); + + glVertex2f(x0, y0); + glVertex2f(x1, y1); + } + glEnd(); + + /* circle */ + glBegin(GL_LINE_LOOP); + for (i = 0; i 360; i += 10) { + float x = r2 * cos(i * M_PI / 180.0); + float y = r2 * sin(i * M_PI / 180.0); + + glVertex2f(x, y); + } + glEnd(); + + /* box */ + glBegin(GL_LINE_LOOP); + glVertex2f(-r3, -r3); + glVertex2f( r3, -r3); + glVertex2f( r3, r3); + glVertex2f(-r3, r3); + glEnd(); +} + + +static void +Init(void) +{ + GLfloat range[2]; + char title[1000]; + + printf(GL_RENDERER = %s\n, (const char *) glGetString(GL_RENDERER)); + printf(GL_VERSION = %s\n, (const char *) glGetString(GL_VERSION)); + + glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, range); + printf(Aliased line width range %.5f .. %.5f\n, range[0], range[1]); + glGetFloatv(GL_LINE_WIDTH_RANGE, range); + printf(Smooth line width range %.5f .. %.5f\n, range[0], range[1]); + glGetFloatv(GL_LINE_WIDTH_GRANULARITY, g); + printf(line width granularity %f\n, g); + fflush(stdout); + + glClearColor(0.0, 0.0, 0.0, 0.0); + glShadeModel(GL_FLAT); + glBlendFunc(GL_SRC_ALPHA, GL_ONE); + /* pattern: |- -- --- | */ + glLineStipple(2, 0x1eed); + + sprintf(title, Line Sampler (%s), (const char *) glGetString(GL_RENDERER)); + glutSetWindowTitle(title); +} + + +static void +Draw(void) +{ + int i; + + glClear(GL_COLOR_BUFFER_BIT); + + for (i = 0; i 2; i++) { + float width = i ? lw : 1.0; + glViewport(0*w, i*h, w, h); + draw_line_sample(GL_FALSE, GL_FALSE, width); + glViewport(1*w, i*h, w, h); + draw_line_sample(GL_TRUE, GL_FALSE, width); + glViewport(2*w, i*h, w, h); + draw_line_sample(GL_FALSE, GL_TRUE, width); + glViewport(3*w, i*h, w, h); + draw_line_sample(GL_TRUE, GL_TRUE, width); + } + +glutSwapBuffers(); +} + + +static void +Reshape(int width, int height) +{ + w = width / 4; + h = height / 2; + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); +} + + +static void +Key(unsigned char key, int x, int y) +{ + if (key == 'w') { + lw -= g; + if (lw g) + lw = g; + } + else if (key == 'W') { + lw += g; + } + if (key == 27) + exit(0); + + printf(line width %.5f\n, lw); + fflush(stdout); + + glutPostRedisplay(); +} + + +int +main(int argc, char **argv) +{ + glutInit(argc, argv); + + glutInitWindowPosition(0, 0); + glutInitWindowSize(1000, 500); + + glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); + + if (!glutCreateWindow(Line Sampler)) { + exit(1); + } + + Init(); + +
Mesa (master): clover: Use Legacy PassManager for LLVM trunk (3.7)
Module: Mesa Branch: master Commit: 7df256add2ae9fb916c3e0f80c879e42d1c8a7a0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7df256add2ae9fb916c3e0f80c879e42d1c8a7a0 Author: Shawn Starr shawn.st...@rogers.com Date: Fri Feb 13 21:16:17 2015 -0500 clover: Use Legacy PassManager for LLVM trunk (3.7) Reviewed-by: Tom Stellard thomas.stell...@amd.com Signed-off-by: Shawn Starr shawn.st...@rogers.com --- src/gallium/state_trackers/clover/llvm/invocation.cpp |9 + 1 file changed, 9 insertions(+) diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp index 0794e61..508979a 100644 --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp @@ -44,7 +44,11 @@ #if HAVE_LLVM 0x0305 #include llvm/ADT/OwningPtr.h #endif +#if HAVE_LLVM = 0x0307 +#include llvm/IR/LegacyPassManager.h +#else #include llvm/PassManager.h +#endif #include llvm/Support/CodeGen.h #include llvm/Support/TargetSelect.h #include llvm/Support/MemoryBuffer.h @@ -298,7 +302,12 @@ namespace { optimize(llvm::Module *mod, unsigned optimization_level, const std::vectorllvm::Function * kernels) { +#if HAVE_LLVM = 0x0307 + llvm::legacy::PassManager PM; +#else llvm::PassManager PM; +#endif + // Add a function internalizer pass. // // By default, the function internalizer pass will look for a function ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit