Mesa (mesa_7_7_branch): gallium/python: support two more formats in retrace dumps
Module: Mesa Branch: mesa_7_7_branch Commit: f8b05566aacbcd0a0e1afa932a85921ed2568afc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8b05566aacbcd0a0e1afa932a85921ed2568afc Author: Zack Rusin Date: Fri Feb 5 19:04:11 2010 -0500 gallium/python: support two more formats in retrace dumps dump PIPE_FORMAT_R8G8B8A8_UNORM and PIPE_FORMAT_R16G16B16_SNORM formats. --- .../state_trackers/python/retrace/interpreter.py |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/gallium/state_trackers/python/retrace/interpreter.py b/src/gallium/state_trackers/python/retrace/interpreter.py index 18fa84f..00d4d87 100755 --- a/src/gallium/state_trackers/python/retrace/interpreter.py +++ b/src/gallium/state_trackers/python/retrace/interpreter.py @@ -531,6 +531,8 @@ class Context(Object): gallium.PIPE_FORMAT_R32G32B32_FLOAT: '3f', gallium.PIPE_FORMAT_R32G32B32A32_FLOAT: '4f', gallium.PIPE_FORMAT_B8G8R8A8_UNORM: '4B', +gallium.PIPE_FORMAT_R8G8B8A8_UNORM: '4B', +gallium.PIPE_FORMAT_R16G16B16_SNORM: '3h', }[velem.src_format] data = vbuf.buffer.read() ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): gallium/draw: fix overflowing element indices
Module: Mesa Branch: mesa_7_7_branch Commit: a6148b8eba35a0d4efec4dcca5e3ac6d86708a58 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6148b8eba35a0d4efec4dcca5e3ac6d86708a58 Author: Zack Rusin Date: Fri Feb 5 18:57:10 2010 -0500 gallium/draw: fix overflowing element indices we piggy back flags in the top four bits of the element indices, so if the maximum index stored in any of the elements is greater than sizeof(ushort) - sizeof(flags we piggy back) then we overflow. fix it by simply falling back to the slow path if we notice the overflow. --- src/gallium/auxiliary/draw/draw_pt_vcache.c |3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pt_vcache.c b/src/gallium/auxiliary/draw/draw_pt_vcache.c index d3f179c..a87ec30 100644 --- a/src/gallium/auxiliary/draw/draw_pt_vcache.c +++ b/src/gallium/auxiliary/draw/draw_pt_vcache.c @@ -347,7 +347,8 @@ vcache_check_run( struct draw_pt_front_end *frontend, draw_count); if (max_index == 0x || - fetch_count > draw_count) { + fetch_count > draw_count || + max_index != (max_index & ~DRAW_PIPE_FLAG_MASK)) { if (0) debug_printf("fail\n"); goto fail; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): gallium/tgsi: fix soa dependencies in mul and cmp instructions
Module: Mesa Branch: mesa_7_7_branch Commit: fb1fe8e76f133b8c9e3713cc7c263a8e63fab40c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fb1fe8e76f133b8c9e3713cc7c263a8e63fab40c Author: Zack Rusin Date: Fri Feb 5 19:22:45 2010 -0500 gallium/tgsi: fix soa dependencies in mul and cmp instructions master has this done in a lot nicer way, this is a simple patch to stop the bleeding in a minimally intrusive manner. --- src/gallium/auxiliary/tgsi/tgsi_exec.c | 57 1 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index bd9b986..d91b27a 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -336,7 +336,9 @@ tgsi_exec_machine_bind_shader( /* XXX we only handle SOA dependencies properly for MOV/SWZ * at this time! */ -if (opcode != TGSI_OPCODE_MOV) { +if (opcode != TGSI_OPCODE_MOV && +opcode != TGSI_OPCODE_MUL && +opcode != TGSI_OPCODE_CMP) { debug_printf("Warning: SOA dependency in instruction" " is not handled:\n"); tgsi_dump_instruction(&parse.FullToken.FullInstruction, @@ -1852,7 +1854,7 @@ exec_instruction( int *pc ) { uint chan_index; - union tgsi_exec_channel r[10]; + union tgsi_exec_channel r[3 * NUM_CHANNELS]; union tgsi_exec_channel d[8]; (*pc)++; @@ -1980,14 +1982,27 @@ exec_instruction( break; case TGSI_OPCODE_MUL: - FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) - { - FETCH(&r[0], 0, chan_index); - FETCH(&r[1], 1, chan_index); + if (inst->Flags & SOA_DEPENDENCY_FLAG) { + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) + { +FETCH(&r[chan_index], 0, chan_index); +FETCH(&r[chan_index + NUM_CHANNELS], 1, chan_index); + } + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) + { +micro_mul( &r[chan_index], &r[chan_index], &r[chan_index + NUM_CHANNELS] ); +STORE(&r[chan_index], 0, chan_index); + } + } else { + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) + { +FETCH(&r[0], 0, chan_index); +FETCH(&r[1], 1, chan_index); - micro_mul( &r[0], &r[0], &r[1] ); +micro_mul( &r[0], &r[0], &r[1] ); - STORE(&r[0], 0, chan_index); +STORE(&r[0], 0, chan_index); + } } break; @@ -2663,14 +2678,28 @@ exec_instruction( break; case TGSI_OPCODE_CMP: - FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { - FETCH(&r[0], 0, chan_index); - FETCH(&r[1], 1, chan_index); - FETCH(&r[2], 2, chan_index); + if (inst->Flags & SOA_DEPENDENCY_FLAG) { + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +FETCH(&r[chan_index], 0, chan_index); +FETCH(&r[chan_index + NUM_CHANNELS], 1, chan_index); +FETCH(&r[chan_index + 2 * NUM_CHANNELS], 2, chan_index); + } + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +micro_lt( &r[chan_index], &r[chan_index], + &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[chan_index + NUM_CHANNELS], + &r[chan_index + 2*NUM_CHANNELS] ); +STORE(&r[chan_index], 0, chan_index); + } + } else { + FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { +FETCH(&r[0], 0, chan_index); +FETCH(&r[1], 1, chan_index); +FETCH(&r[2], 2, chan_index); - micro_lt( &r[0], &r[0], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[1], &r[2] ); +micro_lt( &r[0], &r[0], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &r[1], &r[2] ); - STORE(&r[0], 0, chan_index); +STORE(&r[0], 0, chan_index); + } } break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium/python: support two more formats in retrace dumps
Module: Mesa Branch: master Commit: 8109b6d31367986a2c4a8ad82dadd9c0db61b6c3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8109b6d31367986a2c4a8ad82dadd9c0db61b6c3 Author: Zack Rusin Date: Fri Feb 5 19:04:11 2010 -0500 gallium/python: support two more formats in retrace dumps dump PIPE_FORMAT_R8G8B8A8_UNORM and PIPE_FORMAT_R16G16B16_SNORM formats. --- .../state_trackers/python/retrace/interpreter.py |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/src/gallium/state_trackers/python/retrace/interpreter.py b/src/gallium/state_trackers/python/retrace/interpreter.py index b61d47d..f9b330e 100755 --- a/src/gallium/state_trackers/python/retrace/interpreter.py +++ b/src/gallium/state_trackers/python/retrace/interpreter.py @@ -534,6 +534,8 @@ class Context(Object): gallium.PIPE_FORMAT_R32G32B32_FLOAT: '3f', gallium.PIPE_FORMAT_R32G32B32A32_FLOAT: '4f', gallium.PIPE_FORMAT_B8G8R8A8_UNORM: '4B', +gallium.PIPE_FORMAT_R8G8B8A8_UNORM: '4B', +gallium.PIPE_FORMAT_R16G16B16_SNORM: '3h', }[velem.src_format] data = vbuf.buffer.read() ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: export the tgsi translation code to a common layer
Module: Mesa Branch: master Commit: c61bf363937f40624a5632745630d4f2b9907082 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c61bf363937f40624a5632745630d4f2b9907082 Author: Zack Rusin Date: Mon Feb 8 18:05:22 2010 -0500 llvmpipe: export the tgsi translation code to a common layer the llvmpipe tgsi translation is a lot more complete than what was in gallivm so replacing the latter with the former. this is needed since the draw llvm paths will use the same code. effectively the proven llvmpipe code becomes gallivm. --- SConstruct | 16 +- configs/linux-llvm |2 +- src/gallium/auxiliary/Makefile | 55 +- src/gallium/auxiliary/SConscript | 33 +- src/gallium/auxiliary/draw/draw_private.h |6 - src/gallium/auxiliary/draw/draw_vs_llvm.c | 31 - src/gallium/auxiliary/gallivm/gallivm.cpp | 332 -- src/gallium/auxiliary/gallivm/gallivm.h| 118 -- src/gallium/auxiliary/gallivm/gallivm_builtins.cpp | 140 --- src/gallium/auxiliary/gallivm/gallivm_cpu.cpp | 243 src/gallium/auxiliary/gallivm/gallivm_p.h | 110 -- src/gallium/auxiliary/gallivm/instructions.cpp | 1193 src/gallium/auxiliary/gallivm/instructions.h | 175 --- src/gallium/auxiliary/gallivm/instructionssoa.cpp | 525 - src/gallium/auxiliary/gallivm/instructionssoa.h| 116 -- src/gallium/auxiliary/gallivm/llvm_builtins.c | 114 -- src/gallium/auxiliary/gallivm/loweringpass.cpp | 17 - src/gallium/auxiliary/gallivm/loweringpass.h | 15 - .../llvmpipe => auxiliary/gallivm}/lp_bld_alpha.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_alpha.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_arit.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_arit.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_blend.h |0 .../gallivm}/lp_bld_blend_aos.c|0 .../gallivm}/lp_bld_blend_logicop.c|0 .../gallivm}/lp_bld_blend_soa.c|0 .../llvmpipe => auxiliary/gallivm}/lp_bld_const.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_const.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_conv.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_conv.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_debug.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_debug.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_depth.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_depth.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_flow.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_flow.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_format.h |0 .../gallivm}/lp_bld_format_aos.c |0 .../gallivm}/lp_bld_format_query.c |0 .../gallivm}/lp_bld_format_soa.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_interp.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_interp.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_intr.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_intr.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_logic.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_logic.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_misc.cpp |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_misc.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_pack.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_pack.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_sample.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_sample.h |0 .../gallivm}/lp_bld_sample_soa.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_struct.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_struct.h |0 .../gallivm}/lp_bld_swizzle.c |0 .../gallivm}/lp_bld_swizzle.h |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_tgsi.h |0 .../gallivm}/lp_bld_tgsi_soa.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_type.c |0 .../llvmpipe => auxiliary/gallivm}/lp_bld_type.h |0 src/gallium/auxiliary/gallivm/soabuiltins.c| 210 src/gallium/auxiliary/gallivm/storage.cpp | 364 -- src/gallium/auxiliary/gallivm/storage.h| 133 --- src/gallium/auxiliary/gallivm/storagesoa.cpp | 438 --- src/gallium/auxiliary/gallivm/storagesoa.h | 107 -- src/gallium/auxiliary/gallivm/tgsitollvm.cpp | 1136 --- src/gallium/auxiliary/gallivm/tgsitollvm.h | 20 - src/gallium/drivers/llvmpipe/SConscript| 24 - src/gallium/drivers/llvmpipe/lp_jit.c |2 +- src/gallium/drivers/llvmpipe/lp_jit.h
Mesa (master): llvmpipe: switch to using dynamic stack allocation instead of registers
Module: Mesa Branch: master Commit: 85c7ec70ad41c8ada75a4cbace83d16815d3e2c5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=85c7ec70ad41c8ada75a4cbace83d16815d3e2c5 Author: Zack Rusin Date: Mon Feb 8 21:50:33 2010 -0500 llvmpipe: switch to using dynamic stack allocation instead of registers with mutable vars we don't need to follow the phi nodes. meaning that control flow becomes trivial as we don't have scan the rest of the tgsi to figure out the variable usage anymore. futhermore the memory2register pass promotes alloca/store/load to registers while inserting the right phi nodes. so we get simplicity and performance. --- src/gallium/auxiliary/gallivm/lp_bld_logic.c| 12 ++ src/gallium/auxiliary/gallivm/lp_bld_logic.h|2 + src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 48 +- src/gallium/drivers/llvmpipe/lp_state_fs.c | 11 +++-- 4 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c b/src/gallium/auxiliary/gallivm/lp_bld_logic.c index d23de4f..41ac81b 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c @@ -419,3 +419,15 @@ lp_build_select_aos(struct lp_build_context *bld, #endif } } + +LLVMValueRef +lp_build_alloca(struct lp_build_context *bld) +{ + const struct lp_type type = bld->type; + + if (type.length > 1) { /*vector*/ + return LLVMBuildAlloca(bld->builder, lp_build_vec_type(type), ""); + } else { /*scalar*/ + return LLVMBuildAlloca(bld->builder, lp_build_elem_type(type), ""); + } +} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.h b/src/gallium/auxiliary/gallivm/lp_bld_logic.h index 40d64eb..a399ebf 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.h @@ -76,5 +76,7 @@ lp_build_select_aos(struct lp_build_context *bld, LLVMValueRef b, const boolean cond[4]); +LLVMValueRef +lp_build_alloca(struct lp_build_context *bld); #endif /* !LP_BLD_LOGIC_H */ diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 85e3b1b..a52c6c5 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -185,7 +185,7 @@ emit_fetch( break; case TGSI_FILE_TEMPORARY: - res = bld->temps[reg->Register.Index][swizzle]; + res = LLVMBuildLoad(bld->base.builder, bld->temps[reg->Register.Index][swizzle], ""); if(!res) return bld->base.undef; break; @@ -287,11 +287,13 @@ emit_store( switch( reg->Register.File ) { case TGSI_FILE_OUTPUT: - bld->outputs[reg->Register.Index][chan_index] = value; + LLVMBuildStore(bld->base.builder, value, + bld->outputs[reg->Register.Index][chan_index]); break; case TGSI_FILE_TEMPORARY: - bld->temps[reg->Register.Index][chan_index] = value; + LLVMBuildStore(bld->base.builder, value, + bld->temps[reg->Register.Index][chan_index]); break; case TGSI_FILE_ADDRESS: @@ -438,6 +440,42 @@ indirect_temp_reference(const struct tgsi_full_instruction *inst) return FALSE; } +static int +emit_declaration( + struct lp_build_tgsi_soa_context *bld, + const struct tgsi_full_declaration *decl) +{ + unsigned first = decl->Range.First; + unsigned last = decl->Range.Last; + unsigned idx, i; + + for (idx = first; idx <= last; ++idx) { + boolean ok; + + switch (decl->Declaration.File) { + case TGSI_FILE_TEMPORARY: + for (i = 0; i < NUM_CHANNELS; i++) +bld->temps[idx][i] = lp_build_alloca(&bld->base); + ok = TRUE; + break; + + case TGSI_FILE_OUTPUT: + for (i = 0; i < NUM_CHANNELS; i++) +bld->outputs[idx][i] = lp_build_alloca(&bld->base); + ok = TRUE; + break; + + default: + /* don't need to declare other vars */ + ok = TRUE; + } + + if (!ok) + return FALSE; + } + + return TRUE; +} static int emit_instruction( @@ -1429,6 +1467,10 @@ lp_build_tgsi_soa(LLVMBuilderRef builder, switch( parse.FullToken.Token.Type ) { case TGSI_TOKEN_TYPE_DECLARATION: /* Inputs already interpolated */ + { +if (!emit_declaration( &bld, &parse.FullToken.FullDeclaration )) + _debug_printf("warning: failed to define LLVM variable\n"); + } break; case TGSI_TOKEN_TYPE_INSTRUCTION: diff --git a/src/gallium/drivers/llvmpipe/lp_state_fs.c b/src/gallium/drivers/llvmpipe/lp_state_fs.c index 320e2b7..2001a95 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_fs.c ++
Mesa (master): scons: don't assume llvm is always present
Module: Mesa Branch: master Commit: 43f8a82a76599c10fa33ef35b6500924768de90c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=43f8a82a76599c10fa33ef35b6500924768de90c Author: Zack Rusin Date: Tue Feb 9 00:00:35 2010 -0500 scons: don't assume llvm is always present --- SConstruct |7 +-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/SConstruct b/SConstruct index 76ab902..fa67d14 100644 --- a/SConstruct +++ b/SConstruct @@ -170,8 +170,11 @@ if dri: if drawllvm: # See also http://www.scons.org/wiki/UsingPkgConfig # currently --ldflags --libsdisabled since the driver will force the correct linkage - env.ParseConfig('llvm-config --cflags backend bitreader engine instrumentation interpreter ipo') - env.Append(CPPDEFINES = ['DRAW_LLVM']) +env.Tool('llvm') +if not env.has_key('LLVM_VERSION'): + drawllvm = False + else: + env.Append(CPPDEFINES = ['DRAW_LLVM']) # libGL if platform in ('linux', 'freebsd', 'darwin'): ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): st/xorg: fix a silly offset bug in xv
Module: Mesa Branch: mesa_7_7_branch Commit: 2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d3262d47d57d71a55e5c61d4910c1f38cb0bb8c Author: Zack Rusin Date: Tue Feb 9 21:12:57 2010 -0500 st/xorg: fix a silly offset bug in xv we were multiplying the difference in the wrong direction. --- src/gallium/state_trackers/xorg/xorg_xv.c | 11 +-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c b/src/gallium/state_trackers/xorg/xorg_xv.c index 5f6d749..eb5ce88 100644 --- a/src/gallium/state_trackers/xorg/xorg_xv.c +++ b/src/gallium/state_trackers/xorg/xorg_xv.c @@ -389,6 +389,9 @@ draw_yuv(struct xorg_xv_port_priv *port, { struct pipe_texture **textures = port->yuv[port->current_set]; + /*debug_printf(" draw_yuv([%d, %d, %d ,%d], [%d, %d, %d, %d])\n", +src_x, src_y, src_w, src_h, +dst_x, dst_y, dst_w, dst_h);*/ renderer_draw_yuv(port->r, src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h, @@ -490,6 +493,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, exaMoveInPixmap(pPixmap); dst = exaGetPixmapDriverPrivate(pPixmap); + /*debug_printf("display_video([%d, %d, %d, %d], [%d, %d, %d, %d])\n", + src_x, src_y, src_w, src_h, dstX, dstY, dst_w, dst_h);*/ + if (dst && !dst->tex) { xorg_exa_set_shared_usage(pPixmap); pScrn->pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL); @@ -540,8 +546,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, offset_w = dst_w - w; offset_h = dst_h - h; - draw_yuv(pPriv, src_x + offset_x*diff_x, src_y + offset_y*diff_y, - src_w - offset_w*diff_x, src_h - offset_h*diff_x, + draw_yuv(pPriv, + src_x + offset_x*diff_x, src_y + offset_y*diff_y, + src_w - offset_w*diff_x, src_h - offset_h*diff_y, x, y, w, h); pbox++; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): scons: export drawllvm after actually checking that llvm is present
Module: Mesa Branch: master Commit: 08e2eab8a430402c12a551c539bbc68f1f857def URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=08e2eab8a430402c12a551c539bbc68f1f857def Author: Zack Rusin Date: Wed Feb 10 00:07:51 2010 -0500 scons: export drawllvm after actually checking that llvm is present --- SConstruct | 13 ++--- 1 files changed, 6 insertions(+), 7 deletions(-) diff --git a/SConstruct b/SConstruct index fa67d14..2e00ec4 100644 --- a/SConstruct +++ b/SConstruct @@ -83,6 +83,11 @@ machine = env['machine'] platform = env['platform'] drawllvm = 'llvmpipe' in env['drivers'] +# LLVM support in the Draw module +if drawllvm: +env.Tool('llvm') +if not env.has_key('LLVM_VERSION'): + drawllvm = False # derived options x86 = machine == 'x86' @@ -168,13 +173,7 @@ if dri: # LLVM support in the Draw module if drawllvm: - # See also http://www.scons.org/wiki/UsingPkgConfig -# currently --ldflags --libsdisabled since the driver will force the correct linkage -env.Tool('llvm') -if not env.has_key('LLVM_VERSION'): - drawllvm = False - else: - env.Append(CPPDEFINES = ['DRAW_LLVM']) +env.Append(CPPDEFINES = ['DRAW_LLVM']) # libGL if platform in ('linux', 'freebsd', 'darwin'): ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/xorg: fix a silly offset bug in xv
Module: Mesa Branch: master Commit: f88b43e8d09bf359e7d5770b133cb433b25f9848 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f88b43e8d09bf359e7d5770b133cb433b25f9848 Author: Zack Rusin Date: Tue Feb 9 21:12:57 2010 -0500 st/xorg: fix a silly offset bug in xv we were multiplying the difference in the wrong direction. --- src/gallium/state_trackers/xorg/xorg_xv.c | 11 +-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_xv.c b/src/gallium/state_trackers/xorg/xorg_xv.c index 3dcef22..e37a1c3 100644 --- a/src/gallium/state_trackers/xorg/xorg_xv.c +++ b/src/gallium/state_trackers/xorg/xorg_xv.c @@ -388,6 +388,9 @@ draw_yuv(struct xorg_xv_port_priv *port, { struct pipe_texture **textures = port->yuv[port->current_set]; + /*debug_printf(" draw_yuv([%d, %d, %d ,%d], [%d, %d, %d, %d])\n", +src_x, src_y, src_w, src_h, +dst_x, dst_y, dst_w, dst_h);*/ renderer_draw_yuv(port->r, src_x, src_y, src_w, src_h, dst_x, dst_y, dst_w, dst_h, @@ -489,6 +492,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, exaMoveInPixmap(pPixmap); dst = exaGetPixmapDriverPrivate(pPixmap); + /*debug_printf("display_video([%d, %d, %d, %d], [%d, %d, %d, %d])\n", + src_x, src_y, src_w, src_h, dstX, dstY, dst_w, dst_h);*/ + if (dst && !dst->tex) { xorg_exa_set_shared_usage(pPixmap); pScrn->pScreen->ModifyPixmapHeader(pPixmap, 0, 0, 0, 0, 0, NULL); @@ -539,8 +545,9 @@ display_video(ScrnInfoPtr pScrn, struct xorg_xv_port_priv *pPriv, int id, offset_w = dst_w - w; offset_h = dst_h - h; - draw_yuv(pPriv, src_x + offset_x*diff_x, src_y + offset_y*diff_y, - src_w - offset_w*diff_x, src_h - offset_h*diff_x, + draw_yuv(pPriv, + src_x + offset_x*diff_x, src_y + offset_y*diff_y, + src_w - offset_w*diff_x, src_h - offset_h*diff_y, x, y, w, h); pbox++; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): st/dri: don't expose visuals we' ll have trouble supporting
Module: Mesa Branch: mesa_7_7_branch Commit: df0c8d029d4285ca6edacf6712dcf3a672455254 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=df0c8d029d4285ca6edacf6712dcf3a672455254 Author: Zack Rusin Date: Wed Feb 10 22:15:24 2010 -0500 st/dri: don't expose visuals we'll have trouble supporting without getBuffersWithFormat some visuals will just cause headaches (crashes), so if we're running on an older system simply don't advertise them. --- src/gallium/state_trackers/dri/dri_screen.c | 29 ++ 1 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 25c392e..c55daf9 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -99,12 +99,6 @@ dri_fill_in_modes(struct dri_screen *screen, stencil_bits_array[0] = 0; depth_buffer_factor = 1; - pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); - pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); @@ -117,9 +111,6 @@ dri_fill_in_modes(struct dri_screen *screen, pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); - pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_R5G6B5_UNORM, -PIPE_TEXTURE_2D, -PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_A8R8G8B8_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); @@ -127,6 +118,26 @@ dri_fill_in_modes(struct dri_screen *screen, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + /* we support buffers with different depths only if we can tell the driver +* the actual depth of each of them. */ + if (screen->sPriv->dri2.loader + && (screen->sPriv->dri2.loader->base.version > 2) + && (screen->sPriv->dri2.loader->getBuffersWithFormat != NULL)) { + pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_R5G6B5_UNORM, +PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + } else { + pf_z16 = FALSE; + pf_z32 = FALSE; + pf_r5g6b5 = FALSE; + } + if (pf_z16) { depth_bits_array[depth_buffer_factor] = 16; stencil_bits_array[depth_buffer_factor++] = 0; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_7_branch): st/dri, st/xorg: fix buffers that have attachements of different depth
Module: Mesa Branch: mesa_7_7_branch Commit: 3477dc4c48fe7b82ba4a8464233c2733f400c4e1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3477dc4c48fe7b82ba4a8464233c2733f400c4e1 Author: Zack Rusin Date: Wed Feb 10 19:00:35 2010 -0500 st/dri, st/xorg: fix buffers that have attachements of different depth we actually need to specify the formats for different attachements, otherwise if the color buffer is 24bpp and the app asks for 16bpp depth buffer than we end up fetching the depth from the drawable which is 24bpp and end up creating the wrong depth buffer. use the new getBuffersWithFormat extension to pass the depth correctly. --- src/gallium/state_trackers/dri/dri_drawable.c | 84 +--- src/gallium/state_trackers/xorg/xorg_dri2.c | 24 +-- 2 files changed, 77 insertions(+), 31 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index c20b71e..f3621c1 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -132,14 +132,22 @@ dri_get_buffers(__DRIdrawablePrivate * dPriv) boolean have_depth = FALSE; int i, count; - buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable, -&dri_drawable->w, -&dri_drawable->h, -drawable->attachments, -drawable-> -num_attachments, &count, -dri_drawable-> -loaderPrivate); + if ((dri_screen->dri2.loader +&& (dri_screen->dri2.loader->base.version > 2) +&& (dri_screen->dri2.loader->getBuffersWithFormat != NULL))) + buffers = (*dri_screen->dri2.loader->getBuffersWithFormat) +(dri_drawable, &dri_drawable->w, &dri_drawable->h, + drawable->attachments, drawable->num_attachments, + &count, dri_drawable->loaderPrivate); + else + buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable, +&dri_drawable->w, +&dri_drawable->h, +drawable->attachments, +drawable-> +num_attachments, &count, +dri_drawable-> +loaderPrivate); if (buffers == NULL) { return; @@ -346,12 +354,12 @@ dri_create_buffer(__DRIscreenPrivate * sPriv, case 24: if (visual->stencilBits == 0) { drawable->depth_stencil_format = (screen->d_depth_bits_last) ? - PIPE_FORMAT_X8Z24_UNORM: - PIPE_FORMAT_Z24X8_UNORM; + PIPE_FORMAT_X8Z24_UNORM: + PIPE_FORMAT_Z24X8_UNORM; } else { drawable->depth_stencil_format = (screen->sd_depth_bits_last) ? - PIPE_FORMAT_S8Z24_UNORM: - PIPE_FORMAT_Z24S8_UNORM; + PIPE_FORMAT_S8Z24_UNORM: + PIPE_FORMAT_Z24S8_UNORM; } break; case 32: @@ -375,23 +383,49 @@ dri_create_buffer(__DRIscreenPrivate * sPriv, /* setup dri2 buffers information */ /* TODO incase of double buffer visual, delay fake creation */ i = 0; - drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT; - if (!screen->auto_fake_front) - drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT; - if (visual->doubleBufferMode) - drawable->attachments[i++] = __DRI_BUFFER_BACK_LEFT; - if (visual->depthBits && visual->stencilBits) - drawable->attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL; - else if (visual->depthBits) - drawable->attachments[i++] = __DRI_BUFFER_DEPTH; - else if (visual->stencilBits) - drawable->attachments[i++] = __DRI_BUFFER_STENCIL; - drawable->num_attachments = i; + if (sPriv->dri2.loader + && (sPriv->dri2.loader->base.version > 2) + && (sPriv->dri2.loader->getBuffersWithFormat != NULL)) { + drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT; + drawable->attachments[i++] = visual->rgbBits; + if (!screen->auto_fake_front) { + drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT; + drawable->attachments[i++]
Mesa (master): st/dri, st/xorg: fix buffers that have attachements of different depth
Module: Mesa Branch: master Commit: 59b4146a5dbeb108b53fc9c4132095e264ba04be URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=59b4146a5dbeb108b53fc9c4132095e264ba04be Author: Zack Rusin Date: Wed Feb 10 19:00:35 2010 -0500 st/dri, st/xorg: fix buffers that have attachements of different depth we actually need to specify the formats for different attachements, otherwise if the color buffer is 24bpp and the app asks for 16bpp depth buffer than we end up fetching the depth from the drawable which is 24bpp and end up creating the wrong depth buffer. use the new getBuffersWithFormat extension to pass the depth correctly. --- src/gallium/state_trackers/dri/dri_drawable.c | 84 +--- src/gallium/state_trackers/xorg/xorg_dri2.c | 24 +-- 2 files changed, 77 insertions(+), 31 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_drawable.c b/src/gallium/state_trackers/dri/dri_drawable.c index ff21f2f..97277c0 100644 --- a/src/gallium/state_trackers/dri/dri_drawable.c +++ b/src/gallium/state_trackers/dri/dri_drawable.c @@ -132,14 +132,22 @@ dri_get_buffers(__DRIdrawable * dPriv) boolean have_depth = FALSE; int i, count; - buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable, -&dri_drawable->w, -&dri_drawable->h, -drawable->attachments, -drawable-> -num_attachments, &count, -dri_drawable-> -loaderPrivate); + if ((dri_screen->dri2.loader +&& (dri_screen->dri2.loader->base.version > 2) +&& (dri_screen->dri2.loader->getBuffersWithFormat != NULL))) + buffers = (*dri_screen->dri2.loader->getBuffersWithFormat) +(dri_drawable, &dri_drawable->w, &dri_drawable->h, + drawable->attachments, drawable->num_attachments, + &count, dri_drawable->loaderPrivate); + else + buffers = (*dri_screen->dri2.loader->getBuffers) (dri_drawable, +&dri_drawable->w, +&dri_drawable->h, +drawable->attachments, +drawable-> +num_attachments, &count, +dri_drawable-> +loaderPrivate); if (buffers == NULL) { return; @@ -346,12 +354,12 @@ dri_create_buffer(__DRIscreen * sPriv, case 24: if (visual->stencilBits == 0) { drawable->depth_stencil_format = (screen->d_depth_bits_last) ? - PIPE_FORMAT_X8Z24_UNORM: - PIPE_FORMAT_Z24X8_UNORM; + PIPE_FORMAT_X8Z24_UNORM: + PIPE_FORMAT_Z24X8_UNORM; } else { drawable->depth_stencil_format = (screen->sd_depth_bits_last) ? - PIPE_FORMAT_S8Z24_UNORM: - PIPE_FORMAT_Z24S8_UNORM; + PIPE_FORMAT_S8Z24_UNORM: + PIPE_FORMAT_Z24S8_UNORM; } break; case 32: @@ -375,23 +383,49 @@ dri_create_buffer(__DRIscreen * sPriv, /* setup dri2 buffers information */ /* TODO incase of double buffer visual, delay fake creation */ i = 0; - drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT; - if (!screen->auto_fake_front) - drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT; - if (visual->doubleBufferMode) - drawable->attachments[i++] = __DRI_BUFFER_BACK_LEFT; - if (visual->depthBits && visual->stencilBits) - drawable->attachments[i++] = __DRI_BUFFER_DEPTH_STENCIL; - else if (visual->depthBits) - drawable->attachments[i++] = __DRI_BUFFER_DEPTH; - else if (visual->stencilBits) - drawable->attachments[i++] = __DRI_BUFFER_STENCIL; - drawable->num_attachments = i; + if (sPriv->dri2.loader + && (sPriv->dri2.loader->base.version > 2) + && (sPriv->dri2.loader->getBuffersWithFormat != NULL)) { + drawable->attachments[i++] = __DRI_BUFFER_FRONT_LEFT; + drawable->attachments[i++] = visual->rgbBits; + if (!screen->auto_fake_front) { + drawable->attachments[i++] = __DRI_BUFFER_FAKE_FRONT_LEFT; + drawable->attachments[i++] = visual->rgbBits;
Mesa (master): st/dri: don't expose visuals we'll have trouble supporting
Module: Mesa Branch: master Commit: fd40b9ff32ac0ed02928a2b5516c8d678431806f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd40b9ff32ac0ed02928a2b5516c8d678431806f Author: Zack Rusin Date: Wed Feb 10 22:15:24 2010 -0500 st/dri: don't expose visuals we'll have trouble supporting without getBuffersWithFormat some visuals will just cause headaches (crashes), so if we're running on an older system simply don't advertise them. --- src/gallium/state_trackers/dri/dri_screen.c | 29 ++ 1 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c index 4064976..b36ea43 100644 --- a/src/gallium/state_trackers/dri/dri_screen.c +++ b/src/gallium/state_trackers/dri/dri_screen.c @@ -97,12 +97,6 @@ dri_fill_in_modes(struct dri_screen *screen, stencil_bits_array[0] = 0; depth_buffer_factor = 1; - pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); - pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, - PIPE_TEXTURE_2D, - PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); pf_x8z24 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_X8Z24_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); @@ -115,9 +109,6 @@ dri_fill_in_modes(struct dri_screen *screen, pf_z24s8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z24S8_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); - pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_R5G6B5_UNORM, -PIPE_TEXTURE_2D, -PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); pf_a8r8g8b8 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_A8R8G8B8_UNORM, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); @@ -125,6 +116,26 @@ dri_fill_in_modes(struct dri_screen *screen, PIPE_TEXTURE_2D, PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + /* we support buffers with different depths only if we can tell the driver +* the actual depth of each of them. */ + if (screen->sPriv->dri2.loader + && (screen->sPriv->dri2.loader->base.version > 2) + && (screen->sPriv->dri2.loader->getBuffersWithFormat != NULL)) { + pf_z16 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z16_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_z32 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_Z32_UNORM, + PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_DEPTH_STENCIL, 0); + pf_r5g6b5 = p_screen->is_format_supported(p_screen, PIPE_FORMAT_R5G6B5_UNORM, +PIPE_TEXTURE_2D, + PIPE_TEXTURE_USAGE_RENDER_TARGET, 0); + } else { + pf_z16 = FALSE; + pf_z32 = FALSE; + pf_r5g6b5 = FALSE; + } + if (pf_z16) { depth_bits_array[depth_buffer_factor] = 16; stencil_bits_array[depth_buffer_factor++] = 0; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): gallium/draw: initial code to properly support llvm in the draw module
Module: Mesa Branch: gallium_draw_llvm Commit: c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7 Author: Zack Rusin Date: Mon Feb 22 22:02:58 2010 -0500 gallium/draw: initial code to properly support llvm in the draw module code generate big chunks of the vertex pipeline in order to speed up software vertex processing. --- src/gallium/auxiliary/SConscript |2 + src/gallium/auxiliary/draw/draw_context.c | 26 +- src/gallium/auxiliary/draw/draw_context.h | 10 +- src/gallium/auxiliary/draw/draw_llvm.c | 311 ++ src/gallium/auxiliary/draw/draw_llvm.h | 154 + src/gallium/auxiliary/draw/draw_llvm_translate.c | 653 src/gallium/auxiliary/draw/draw_private.h | 11 + src/gallium/auxiliary/draw/draw_pt.c |4 +- src/gallium/auxiliary/draw/draw_pt.h |1 + .../draw/draw_pt_fetch_shade_pipeline_llvm.c | 432 + src/gallium/auxiliary/draw/draw_vs_llvm.c |9 +- src/gallium/drivers/llvmpipe/lp_context.c |6 +- 12 files changed, 1601 insertions(+), 18 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=c5c5cd7132e18f4aad8e73d8ee879f8823c4c1e7 ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: implement some control-flow
Module: Mesa Branch: master Commit: 80f3cc36c511f62666162bca1d88c7746b98a27d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=80f3cc36c511f62666162bca1d88c7746b98a27d Author: Zack Rusin Date: Mon Mar 1 22:11:08 2010 -0500 llvmpipe: implement some control-flow implements if/else/endif constructs and lays down the code for looping and others. we create a conditional execution mask which decides which of the four inputs are enabled for any store. it's used only if an execution mask is present, otherwise we go through a direct store. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 104 --- 1 files changed, 93 insertions(+), 11 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 4cf28a9..81b0ab7 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -52,6 +52,7 @@ #include "lp_bld_swizzle.h" #include "lp_bld_flow.h" #include "lp_bld_tgsi.h" +#include "lp_bld_debug.h" #define LP_MAX_TEMPS 256 @@ -81,6 +82,23 @@ #define QUAD_BOTTOM_LEFT 2 #define QUAD_BOTTOM_RIGHT 3 +#define LP_TGSI_MAX_NESTING 16 + +struct lp_exec_mask { + struct lp_build_context *bld; + + boolean has_mask; + + LLVMTypeRef int_vec_type; + + LLVMValueRef cond_stack[LP_TGSI_MAX_NESTING]; + int cond_stack_size; + LLVMValueRef cond_mask; + + LLVMValueRef exec_mask; + + LLVMValueRef inv_mask; +}; struct lp_build_tgsi_soa_context { @@ -97,9 +115,9 @@ struct lp_build_tgsi_soa_context LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS]; struct lp_build_mask_context *mask; + struct lp_exec_mask exec_mask; }; - static const unsigned char swizzle_left[4] = { QUAD_TOP_LEFT, QUAD_TOP_LEFT, @@ -124,6 +142,70 @@ swizzle_bottom[4] = { QUAD_BOTTOM_LEFT, QUAD_BOTTOM_RIGHT }; +static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context *bld) +{ + mask->bld = bld; + mask->has_mask = FALSE; + mask->cond_stack_size = 0; + + mask->int_vec_type = lp_build_int_vec_type(mask->bld->type); + mask->inv_mask = + LLVMConstSub(LLVMConstNull(mask->int_vec_type), + LLVMConstAllOnes(mask->int_vec_type)); +} + +static void lp_exec_mask_update(struct lp_exec_mask *mask) +{ + mask->exec_mask = mask->cond_mask; + if (mask->cond_stack_size > 0) + mask->has_mask = TRUE; +} + +static void lp_exec_mask_cond_push(struct lp_exec_mask *mask, + LLVMValueRef val) +{ + mask->cond_stack[mask->cond_stack_size++] = mask->cond_mask; + mask->cond_mask = LLVMBuildBitCast(mask->bld->builder, val, + mask->int_vec_type, ""); + + lp_exec_mask_update(mask); +} + +static void lp_exec_mask_cond_invert(struct lp_exec_mask *mask) +{ + LLVMValueRef prev_mask = mask->cond_stack[mask->cond_stack_size - 1]; + LLVMValueRef inv_mask = LLVMBuildXor(mask->bld->builder, +mask->cond_mask, +mask->inv_mask, ""); + mask->cond_mask = LLVMBuildAnd(mask->bld->builder, + inv_mask, + prev_mask, ""); + lp_exec_mask_update(mask); +} + +static void lp_exec_mask_cond_pop(struct lp_exec_mask *mask) +{ + mask->cond_mask = mask->cond_stack[--mask->cond_stack_size]; + lp_exec_mask_update(mask); +} + +static void lp_exec_mask_store(struct lp_exec_mask *mask, + LLVMValueRef val, + LLVMValueRef dst) +{ + if (mask->has_mask) { + LLVMValueRef real_val, dst_val; + + dst_val = LLVMBuildLoad(mask->bld->builder, dst, ""); + real_val = lp_build_select(mask->bld, + mask->exec_mask, + val, dst_val); + + LLVMBuildStore(mask->bld->builder, real_val, dst); + } else + LLVMBuildStore(mask->bld->builder, val, dst); +} + static LLVMValueRef emit_ddx(struct lp_build_tgsi_soa_context *bld, @@ -287,13 +369,13 @@ emit_store( switch( reg->Register.File ) { case TGSI_FILE_OUTPUT: - LLVMBuildStore(bld->base.builder, value, - bld->outputs[reg->Register.Index][chan_index]); + lp_exec_mask_store(&bld->exec_mask, value, + bld->outputs[reg->Register.Index][chan_index]); break; case TGSI_FILE_TEMPORARY: - LLVMBuildStore(bld->base.builder, value, - bld->temps[reg->Register.Index][chan_index]); + lp_exec_mask_store(&bld->exec_mask, value, + bld->temps[reg->Register.Index][chan_index]);
Mesa (master): llvmpipe: improve based on review from Jose and fix else clauses
Module: Mesa Branch: master Commit: faf8215bae70f020420242dc812ef141fdcf5417 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=faf8215bae70f020420242dc812ef141fdcf5417 Author: Zack Rusin Date: Tue Mar 2 10:18:29 2010 -0500 llvmpipe: improve based on review from Jose and fix else clauses else was broken in the outter most else statemants, plus the code didn't need an inverted mask to compute the inverse of the current condition. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 17 + 1 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 81b0ab7..ae86624 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -96,8 +96,6 @@ struct lp_exec_mask { LLVMValueRef cond_mask; LLVMValueRef exec_mask; - - LLVMValueRef inv_mask; }; struct lp_build_tgsi_soa_context @@ -149,9 +147,6 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context mask->cond_stack_size = 0; mask->int_vec_type = lp_build_int_vec_type(mask->bld->type); - mask->inv_mask = - LLVMConstSub(LLVMConstNull(mask->int_vec_type), - LLVMConstAllOnes(mask->int_vec_type)); } static void lp_exec_mask_update(struct lp_exec_mask *mask) @@ -174,9 +169,15 @@ static void lp_exec_mask_cond_push(struct lp_exec_mask *mask, static void lp_exec_mask_cond_invert(struct lp_exec_mask *mask) { LLVMValueRef prev_mask = mask->cond_stack[mask->cond_stack_size - 1]; - LLVMValueRef inv_mask = LLVMBuildXor(mask->bld->builder, -mask->cond_mask, -mask->inv_mask, ""); + LLVMValueRef inv_mask = LLVMBuildNot(mask->bld->builder, +mask->cond_mask, ""); + + /* means that we didn't have any mask before and that +* we were fully enabled */ + if (mask->cond_stack_size <= 1) { + prev_mask = LLVMConstAllOnes(mask->int_vec_type); + } + mask->cond_mask = LLVMBuildAnd(mask->bld->builder, inv_mask, prev_mask, ""); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: fix a crash by making sure we set the has_mask flag correctly
Module: Mesa Branch: master Commit: 1d84808dc045d7fcf2fade8d1504bc25e7c5041a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d84808dc045d7fcf2fade8d1504bc25e7c5041a Author: Zack Rusin Date: Mon Mar 8 15:04:04 2010 -0500 gallivm: fix a crash by making sure we set the has_mask flag correctly --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 28ff362..fbb664d 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -152,8 +152,7 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context static void lp_exec_mask_update(struct lp_exec_mask *mask) { mask->exec_mask = mask->cond_mask; - if (mask->cond_stack_size > 0) - mask->has_mask = TRUE; + mask->has_mask = (mask->cond_stack_size > 0); } static void lp_exec_mask_cond_push(struct lp_exec_mask *mask, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): fpglsl: add some for and while loops
Module: Mesa Branch: master Commit: 5f80dad7fd03ca811f2b0561269be0180970dbf8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f80dad7fd03ca811f2b0561269be0180970dbf8 Author: Zack Rusin Date: Wed Mar 10 15:37:18 2010 -0500 fpglsl: add some for and while loops --- progs/fpglsl/for.glsl | 11 +++ progs/fpglsl/while.glsl |7 +++ 2 files changed, 18 insertions(+), 0 deletions(-) diff --git a/progs/fpglsl/for.glsl b/progs/fpglsl/for.glsl new file mode 100644 index 000..6aa03d6 --- /dev/null +++ b/progs/fpglsl/for.glsl @@ -0,0 +1,11 @@ +uniform int KernelSizeInt; + +void main() { +int i; +vec4 sum = vec4(0.0); +for (i = 0; i < KernelSizeInt; ++i) { + sum.g += 0.25; +} +sum.a = 1; +gl_FragColor = sum; +} diff --git a/progs/fpglsl/while.glsl b/progs/fpglsl/while.glsl new file mode 100644 index 000..05fb860 --- /dev/null +++ b/progs/fpglsl/while.glsl @@ -0,0 +1,7 @@ +void main() { +float sum = 0.0; +while (sum < 0.49) { + sum += 0.1; +} +gl_FragColor = vec4(sum); +} ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): fpglsl: set an integer uniform required by the loop example
Module: Mesa Branch: master Commit: 1ad0a0fd8fb5314e33c1b4f82c9e487c05f80fb8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1ad0a0fd8fb5314e33c1b4f82c9e487c05f80fb8 Author: Zack Rusin Date: Wed Mar 10 15:42:26 2010 -0500 fpglsl: set an integer uniform required by the loop example --- progs/fpglsl/fp-tri.c |5 + 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/progs/fpglsl/fp-tri.c b/progs/fpglsl/fp-tri.c index c9b08fb..8af0984 100644 --- a/progs/fpglsl/fp-tri.c +++ b/progs/fpglsl/fp-tri.c @@ -129,6 +129,11 @@ static void setup_uniforms() } { + GLint loci = glGetUniformLocationARB(program, "KernelSizeInt"); + if (loci >= 0) + glUniform1i(loci, 4); + } + { GLint loc1f = glGetUniformLocationARB(program, "KernelValue1f"); GLint loc2f = glGetUniformLocationARB(program, "KernelValue2f"); GLint loc4f = glGetUniformLocationARB(program, "KernelValue4f"); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): fpglsl: a few more useful glsl tests
Module: Mesa Branch: master Commit: a44f362567f6ed4054e88d8afc94d38f19ed6269 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a44f362567f6ed4054e88d8afc94d38f19ed6269 Author: Zack Rusin Date: Wed Mar 10 16:31:18 2010 -0500 fpglsl: a few more useful glsl tests --- progs/fpglsl/dowhile.glsl |8 progs/fpglsl/dowhile2.glsl | 10 ++ progs/fpglsl/forbreak.glsl | 13 + progs/fpglsl/simpleif.glsl |6 ++ progs/fpglsl/while2.glsl |9 + 5 files changed, 46 insertions(+), 0 deletions(-) diff --git a/progs/fpglsl/dowhile.glsl b/progs/fpglsl/dowhile.glsl new file mode 100644 index 000..ed9d729 --- /dev/null +++ b/progs/fpglsl/dowhile.glsl @@ -0,0 +1,8 @@ +void main() { +float sum = 0.0; +do { + sum += 0.1; + break; +} while (true); +gl_FragColor = vec4(sum); +} diff --git a/progs/fpglsl/dowhile2.glsl b/progs/fpglsl/dowhile2.glsl new file mode 100644 index 000..f3e00b8 --- /dev/null +++ b/progs/fpglsl/dowhile2.glsl @@ -0,0 +1,10 @@ +void main() { +float sum = 0.0; +do { + sum += 0.1; + if (sum < 0.49) + continue; + break; +} while (true); +gl_FragColor = vec4(sum); +} diff --git a/progs/fpglsl/forbreak.glsl b/progs/fpglsl/forbreak.glsl new file mode 100644 index 000..87669c6 --- /dev/null +++ b/progs/fpglsl/forbreak.glsl @@ -0,0 +1,13 @@ +uniform int KernelSizeInt; + +void main() { +int i; +vec4 sum = vec4(0.0); +for (i = 0; i < KernelSizeInt; ++i) { + sum.g += 0.25; +if (i > 0) + break; +} +sum.a = 1; +gl_FragColor = sum; +} diff --git a/progs/fpglsl/simpleif.glsl b/progs/fpglsl/simpleif.glsl new file mode 100644 index 000..922421b --- /dev/null +++ b/progs/fpglsl/simpleif.glsl @@ -0,0 +1,6 @@ +void main() { +// this should always be true +if (gl_FragCoord.x >= 0.0) { + gl_FragColor = vec4(0.5, 0.0, 0.5, 1.0); +} +} diff --git a/progs/fpglsl/while2.glsl b/progs/fpglsl/while2.glsl new file mode 100644 index 000..19c8904 --- /dev/null +++ b/progs/fpglsl/while2.glsl @@ -0,0 +1,9 @@ +void main() { +float sum = 0.0; +while (true) { + sum += 0.1; +if (sum > 0.8) + break; +} +gl_FragColor = vec4(sum); +} ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: properly test the if condition and branch to the proper label
Module: Mesa Branch: master Commit: ac33e7752d22f03db84e6a4c822b3a3f41d05f77 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ac33e7752d22f03db84e6a4c822b3a3f41d05f77 Author: Zack Rusin Date: Wed Mar 10 16:36:20 2010 -0500 gallivm: properly test the if condition and branch to the proper label makes loops work --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 085afe3..aa57289 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -301,7 +301,7 @@ static void lp_exec_endloop(struct lp_exec_mask *mask) endloop = lp_build_insert_new_block(mask->bld->builder, "endloop"); LLVMBuildCondBr(mask->bld->builder, - i1cond, endloop, mask->loop_block); + i1cond, mask->loop_block, endloop); LLVMPositionBuilderAtEnd(mask->bld->builder, endloop); @@ -1498,6 +1498,8 @@ emit_instruction( case TGSI_OPCODE_IF: tmp0 = emit_fetch(bld, inst, 0, CHAN_X); + tmp0 = lp_build_cmp(&bld->base, PIPE_FUNC_NOTEQUAL, + tmp0, bld->base.zero); lp_exec_mask_cond_push(&bld->exec_mask, tmp0); break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: implement loops
Module: Mesa Branch: master Commit: 18d406e8a8a838c82ee4ec5dbf244ab8bba0855e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=18d406e8a8a838c82ee4ec5dbf244ab8bba0855e Author: Zack Rusin Date: Tue Mar 9 15:09:15 2010 -0500 gallivm: implement loops --- src/gallium/auxiliary/gallivm/lp_bld_flow.c |2 +- src/gallium/auxiliary/gallivm/lp_bld_flow.h |4 +- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 157 +- 3 files changed, 153 insertions(+), 10 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.c b/src/gallium/auxiliary/gallivm/lp_bld_flow.c index bc83138..c2f3541 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.c @@ -308,7 +308,7 @@ lp_build_flow_scope_end(struct lp_build_flow_context *flow) * Note: this function has no dependencies on the flow code and could * be used elsewhere. */ -static LLVMBasicBlockRef +LLVMBasicBlockRef lp_build_insert_new_block(LLVMBuilderRef builder, const char *name) { LLVMBasicBlockRef current_block; diff --git a/src/gallium/auxiliary/gallivm/lp_bld_flow.h b/src/gallium/auxiliary/gallivm/lp_bld_flow.h index 4c225a0..8bb2254 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_flow.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_flow.h @@ -145,7 +145,9 @@ lp_build_else(struct lp_build_if_state *ctx); void lp_build_endif(struct lp_build_if_state *ctx); - + +LLVMBasicBlockRef +lp_build_insert_new_block(LLVMBuilderRef builder, const char *name); #endif /* !LP_BLD_FLOW_H */ diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index fbb664d..085afe3 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -95,6 +95,19 @@ struct lp_exec_mask { int cond_stack_size; LLVMValueRef cond_mask; + LLVMValueRef break_stack[LP_TGSI_MAX_NESTING]; + int break_stack_size; + LLVMValueRef break_mask; + + LLVMValueRef cont_stack[LP_TGSI_MAX_NESTING]; + int cont_stack_size; + LLVMValueRef cont_mask; + + LLVMBasicBlockRef loop_stack[LP_TGSI_MAX_NESTING]; + int loop_stack_size; + LLVMBasicBlockRef loop_block; + + LLVMValueRef exec_mask; }; @@ -145,14 +158,33 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context mask->bld = bld; mask->has_mask = FALSE; mask->cond_stack_size = 0; + mask->loop_stack_size = 0; + mask->break_stack_size = 0; + mask->cont_stack_size = 0; mask->int_vec_type = lp_build_int_vec_type(mask->bld->type); } static void lp_exec_mask_update(struct lp_exec_mask *mask) { - mask->exec_mask = mask->cond_mask; - mask->has_mask = (mask->cond_stack_size > 0); + if (mask->loop_stack_size) { + /*for loops we need to update the entire mask at + * runtime */ + LLVMValueRef tmp; + tmp = LLVMBuildAnd(mask->bld->builder, + mask->cont_mask, + mask->break_mask, + "maskcb"); + mask->exec_mask = LLVMBuildAnd(mask->bld->builder, + mask->cond_mask, + tmp, + "maskfull"); + } else + mask->exec_mask = mask->cond_mask; + + + mask->has_mask = (mask->cond_stack_size > 0 || + mask->loop_stack_size > 0); } static void lp_exec_mask_cond_push(struct lp_exec_mask *mask, @@ -189,6 +221,102 @@ static void lp_exec_mask_cond_pop(struct lp_exec_mask *mask) lp_exec_mask_update(mask); } +static void lp_exec_bgnloop(struct lp_exec_mask *mask) +{ + + if (mask->cont_stack_size == 0) + mask->cont_mask = LLVMConstAllOnes(mask->int_vec_type); + if (mask->cont_stack_size == 0) + mask->break_mask = LLVMConstAllOnes(mask->int_vec_type); + if (mask->cond_stack_size == 0) + mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type); + mask->loop_stack[mask->loop_stack_size++] = mask->loop_block; + mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop"); + LLVMBuildBr(mask->bld->builder, mask->loop_block); + LLVMPositionBuilderAtEnd(mask->bld->builder, mask->loop_block); + + lp_exec_mask_update(mask); +} + +static void lp_exec_break(struct lp_exec_mask *mask) +{ + LLVMValueRef exec_mask = LLVMBuildNot(mask->bld->builder, + mask->exec_mask, + "break"); + + mask->break_stack[mask->break_stack_size++] = mask->break_mask; + if (mask->break_stack_size > 1) { + mask->break_mask = LLVMBuildAnd(mask->bld->builder, +
Mesa (master): gallivm: simplify conditional branching
Module: Mesa Branch: master Commit: d42229707ad4be9be5a8e122354be7102d6ec348 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d42229707ad4be9be5a8e122354be7102d6ec348 Author: Jose Fonseca Date: Wed Mar 10 17:22:30 2010 -0500 gallivm: simplify conditional branching Instead of testing each component individually, we can test the entire vector at once. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 29 ++ 1 files changed, 8 insertions(+), 21 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index aa57289..b3a0fe7 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -276,27 +276,14 @@ static void lp_exec_continue(struct lp_exec_mask *mask) static void lp_exec_endloop(struct lp_exec_mask *mask) { LLVMBasicBlockRef endloop; - LLVMValueRef i1cond; - - { /* convert our soa vector into i1 */ - int i; - LLVMValueRef packed = 0; - for (i = 0; i < mask->bld->type.length; ++i) { - LLVMValueRef component = LLVMBuildExtractElement( -mask->bld->builder, -mask->break_mask, -LLVMConstInt(LLVMInt32Type(), i, 0), ""); - if (packed) -packed = LLVMBuildOr(mask->bld->builder, - packed, component, ""); - else -packed = component; - } - i1cond = LLVMBuildICmp(mask->bld->builder, LLVMIntNE, - packed, - LLVMConstNull(LLVMTypeOf(packed)), - ""); - } + LLVMTypeRef reg_type = LLVMIntType(mask->bld->type.width* + mask->bld->type.length); + /* i1cond = (mask == 0) */ + LLVMValueRef i1cond = LLVMBuildICmp( + mask->bld->builder, + LLVMIntNE, + LLVMBuildBitCast(mask->bld->builder, mask->break_mask, reg_type, ""), + LLVMConstNull(reg_type), ""); endloop = lp_build_insert_new_block(mask->bld->builder, "endloop"); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: make sure that the alloca' s are the very first thing in the function
Module: Mesa Branch: master Commit: 012fabca722494162c244a367913562b8cfa4677 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=012fabca722494162c244a367913562b8cfa4677 Author: Zack Rusin Date: Mon Mar 29 16:17:17 2010 -0400 gallivm: make sure that the alloca's are the very first thing in the function otherwise mem2reg can't put them in registers --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 20 +++- 1 files changed, 19 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index f160be8..95cd6a0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -651,6 +651,19 @@ emit_declaration( unsigned first = decl->Range.First; unsigned last = decl->Range.Last; unsigned idx, i; + LLVMBasicBlockRef current_block = + LLVMGetInsertBlock(bld->base.builder); + LLVMBasicBlockRef first_block = + LLVMGetEntryBasicBlock( + LLVMGetBasicBlockParent(current_block)); + LLVMValueRef first_inst = + LLVMGetFirstInstruction(first_block); + + /* we want alloca's to be the first instruction +* in the function so we need to rewind the builder +* to the very beginning */ + LLVMPositionBuilderBefore(bld->base.builder, + first_inst); for (idx = first; idx <= last; ++idx) { boolean ok; @@ -673,10 +686,15 @@ emit_declaration( ok = TRUE; } - if (!ok) + if (!ok) { + LLVMPositionBuilderAtEnd(bld->base.builder, + current_block); return FALSE; + } } + LLVMPositionBuilderAtEnd(bld->base.builder, +current_block); return TRUE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: cleanup the code (found by coverity)
Module: Mesa Branch: master Commit: dc886ba1391d7d890bd1f5532bc14553e883a418 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dc886ba1391d7d890bd1f5532bc14553e883a418 Author: Zack Rusin Date: Tue Mar 30 08:55:17 2010 -0400 gallivm: cleanup the code (found by coverity) the condition can't be false, declerations are ok even if we don't emit any. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 12 +--- 1 files changed, 1 insertions(+), 11 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 95cd6a0..8901e65 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -666,30 +666,20 @@ emit_declaration( first_inst); for (idx = first; idx <= last; ++idx) { - boolean ok; - switch (decl->Declaration.File) { case TGSI_FILE_TEMPORARY: for (i = 0; i < NUM_CHANNELS; i++) bld->temps[idx][i] = lp_build_alloca(&bld->base); - ok = TRUE; break; case TGSI_FILE_OUTPUT: for (i = 0; i < NUM_CHANNELS; i++) bld->outputs[idx][i] = lp_build_alloca(&bld->base); - ok = TRUE; break; default: /* don't need to declare other vars */ - ok = TRUE; - } - - if (!ok) { - LLVMPositionBuilderAtEnd(bld->base.builder, - current_block); - return FALSE; + break; } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: various fixes for the translation code
Module: Mesa Branch: gallium_draw_llvm Commit: 1963112f9d0a2ed8e237641eef8eb384365d1375 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1963112f9d0a2ed8e237641eef8eb384365d1375 Author: Zack Rusin Date: Tue Mar 30 12:35:40 2010 -0400 draw llvm: various fixes for the translation code the from translation isn't quite right yet --- src/gallium/auxiliary/SConscript |3 +- src/gallium/auxiliary/draw/draw_gs.c | 12 +- src/gallium/auxiliary/draw/draw_llvm.c | 12 +- src/gallium/auxiliary/draw/draw_llvm.h |2 +- src/gallium/auxiliary/draw/draw_llvm_translate.c | 420 ++ 5 files changed, 206 insertions(+), 243 deletions(-) diff --git a/src/gallium/auxiliary/SConscript b/src/gallium/auxiliary/SConscript index 76675fb..b234b2f 100644 --- a/src/gallium/auxiliary/SConscript +++ b/src/gallium/auxiliary/SConscript @@ -205,7 +205,8 @@ if drawllvm: 'gallivm/lp_bld_tgsi_soa.c', 'gallivm/lp_bld_type.c', 'draw/draw_llvm.c', -'draw/draw_pt_fetch_shade_pipeline_llvm.c' +'draw/draw_pt_fetch_shade_pipeline_llvm.c', +'draw/draw_llvm_translate.c' ] gallium = env.ConvenienceLibrary( diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 7069aa6..131deed 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -342,10 +342,10 @@ void draw_geometry_shader_delete(struct draw_geometry_shader *shader) void draw_geometry_shader_prepare(struct draw_geometry_shader *shader, struct draw_context *draw) { -if (shader->machine->Tokens != shader->state.tokens) { - tgsi_exec_machine_bind_shader(shader->machine, - shader->state.tokens, - draw->gs.num_samplers, - draw->gs.samplers); -} + if (shader && shader->machine->Tokens != shader->state.tokens) { + tgsi_exec_machine_bind_shader(shader->machine, +shader->state.tokens, +draw->gs.num_samplers, +draw->gs.samplers); + } } diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 91fe838..aa4a310 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -115,8 +115,8 @@ init_globals(struct draw_llvm *llvm) llvm->context_ptr_type = LLVMPointerType(context_type, 0); } { - LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMOpaqueType(), 0); - llvm->buffer_ptr_type = LLVMArrayType(buffer_ptr, PIPE_MAX_ATTRIBS); + LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMIntType(8), 0); + llvm->buffer_ptr_type = LLVMPointerType(buffer_ptr, 0); } } @@ -221,19 +221,19 @@ generate_vs(struct draw_llvm *llvm, static void generate_fetch(LLVMBuilderRef builder, - const LLVMValueRef vbuffers_ptr, + LLVMValueRef vbuffers_ptr, LLVMValueRef *res, struct pipe_vertex_element *velem, struct pipe_vertex_buffer *vbuf, LLVMValueRef index) { - LLVMValueRef indices = LLVMConstInt(LLVMInt32Type(), - velem->vertex_buffer_index, 0); + LLVMValueRef indices = LLVMConstInt(LLVMInt64Type(), velem->vertex_buffer_index, 0); LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr, &indices, 1, ""); LLVMValueRef stride = LLVMBuildMul(builder, LLVMConstInt(LLVMInt32Type(), vbuf->stride, 0), index, ""); + stride = LLVMBuildAdd(builder, stride, LLVMConstInt(LLVMInt32Type(), vbuf->buffer_offset, 0), ""); @@ -393,7 +393,7 @@ draw_llvm_generate(struct draw_llvm *llvm) struct pipe_vertex_element *velem = &draw->pt.vertex_element[j]; struct pipe_vertex_buffer *vbuf = &draw->pt.vertex_buffer[ velem->vertex_buffer_index]; - +LLVMDumpValue(function); generate_fetch(builder, vbuffers_ptr, &aos_attribs[j][i], velem, vbuf, true_index); } diff --git a/src/gallium/auxiliary/draw/draw_llvm.h b/src/gallium/auxiliary/draw/draw_llvm.h index cbbfeec..e375008 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.h +++ b/src/gallium/auxiliary/draw/draw_llvm.h @@ -115,7 +115,7 @@ draw_shader(struct draw_jit_context *context, typedef void (*draw_jit_vert_func)(struct draw_jit_context *context, struct vertex_header *io, -
Mesa (gallium_draw_llvm): draw llvm: we translate between pointers, not values directly
Module: Mesa Branch: gallium_draw_llvm Commit: 6f34339af421d4001dcc01114be462d2ea381f16 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f34339af421d4001dcc01114be462d2ea381f16 Author: Zack Rusin Date: Tue Mar 30 12:52:09 2010 -0400 draw llvm: we translate between pointers, not values directly --- src/gallium/auxiliary/draw/draw_llvm_translate.c | 23 +++-- 1 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c b/src/gallium/auxiliary/draw/draw_llvm_translate.c index 6cbe98c..74830f1 100644 --- a/src/gallium/auxiliary/draw/draw_llvm_translate.c +++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c @@ -21,7 +21,7 @@ static LLVMValueRef from_64_float(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMDoubleType() , ""); + LLVMPointerType(LLVMDoubleType(), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); return LLVMBuildFPTrunc(builder, l, LLVMFloatType(), ""); } @@ -30,7 +30,7 @@ static LLVMValueRef from_32_float(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMFloatType() , ""); + LLVMPointerType(LLVMFloatType(), 0) , ""); return LLVMBuildLoad(builder, bc, ""); } @@ -45,7 +45,7 @@ static INLINE LLVMValueRef from_16_uscaled(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(16) , ""); + LLVMPointerType(LLVMIntType(16), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); return LLVMBuildUIToFP(builder, l, LLVMFloatType(), ""); } @@ -54,7 +54,7 @@ static INLINE LLVMValueRef from_32_uscaled(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(32) , ""); + LLVMPointerType(LLVMIntType(32), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); return LLVMBuildUIToFP(builder, l, LLVMFloatType(), ""); } @@ -70,7 +70,7 @@ static INLINE LLVMValueRef from_16_sscaled(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(16) , ""); + LLVMPointerType(LLVMIntType(16), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); return LLVMBuildSIToFP(builder, l, LLVMFloatType(), ""); } @@ -79,7 +79,7 @@ static INLINE LLVMValueRef from_32_sscaled(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(32) , ""); + LLVMPointerType(LLVMIntType(32), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); return LLVMBuildSIToFP(builder, l, LLVMFloatType(), ""); } @@ -98,7 +98,7 @@ static INLINE LLVMValueRef from_16_unorm(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(16) , ""); + LLVMPointerType(LLVMIntType(16), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); LLVMValueRef uscaled = LLVMBuildUIToFP(builder, l, LLVMFloatType(), ""); return LLVMBuildFDiv(builder, uscaled, @@ -109,7 +109,7 @@ static INLINE LLVMValueRef from_32_unorm(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(32) , ""); + LLVMPointerType(LLVMIntType(32), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); LLVMValueRef uscaled = LLVMBuildUIToFP(builder, l, LLVMFloatType(), ""); @@ -130,7 +130,7 @@ static INLINE LLVMValueRef from_16_snorm(LLVMBuilderRef builder, LLVMValueRef val) { LLVMValueRef bc = LLVMBuildBitCast(builder, val, - LLVMIntType(16) , ""); + LLVMPointerType(LLVMIntType(16), 0) , ""); LLVMValueRef l = LLVMBuildLoad(builder, bc, ""); LLVMValueRef uscaled = LLVMBuildSIToFP(builder, l, LLVMFloatType(), ""); return LLVMBuildFDiv(builder, uscaled, @@ -141,7 +141,7 @@ static INLINE LLVMValueRef from_32_snorm(LLVMBuilderRef builder, LLVMValueRef val)
Mesa (gallium_draw_llvm): draw llvm: fix some silly mistakes
Module: Mesa Branch: gallium_draw_llvm Commit: 8bc07fc83e344c9e693bdec4148009320a1731f1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bc07fc83e344c9e693bdec4148009320a1731f1 Author: Zack Rusin Date: Tue Mar 30 16:16:36 2010 -0400 draw llvm: fix some silly mistakes the vs_type selection isn't ideal, but for now both llvmpipe's fs and vs do the same thing which is operate on 4xfloat vector as the base type --- src/gallium/auxiliary/draw/draw_llvm.c | 22 +++--- src/gallium/auxiliary/draw/draw_llvm_translate.c |1 - 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index aa4a310..cd183d5 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -205,14 +205,24 @@ generate_vs(struct draw_llvm *llvm, LLVMValueRef io) { const struct tgsi_token *tokens = llvm->draw->vs.vertex_shader->state.tokens; - struct lp_type vs_type = lp_type_float(32); - LLVMValueRef vs_consts; + struct lp_type vs_type; + LLVMValueRef consts_ptr = draw_jit_context_vs_constants(builder, context_ptr); + + memset(&vs_type, 0, sizeof vs_type); + vs_type.floating = TRUE; /* floating point values */ + vs_type.sign = TRUE; /* values are signed */ + vs_type.norm = FALSE;/* values are not limited to [0,1] or [-1,1] */ + vs_type.width = 32; /* 32-bit float */ + vs_type.length = 4; /* 4 elements per vector */ +#if 0 + num_vs = 4; /* number of vertices per block */ +#endif lp_build_tgsi_soa(builder, tokens, vs_type, NULL /*struct lp_build_mask_context *mask*/, - vs_consts, + consts_ptr, NULL /*pos*/, inputs, outputs, @@ -312,7 +322,6 @@ convert_to_soa(LLVMBuilderRef builder, LLVMConstInt(LLVMInt32Type(), 2, 0)); soa[i][3] = aos_to_soa(builder, val0, val1, val2, val3, LLVMConstInt(LLVMInt32Type(), 3, 0)); - } } @@ -329,7 +338,6 @@ draw_llvm_generate(struct draw_llvm *llvm) LLVMValueRef io_ptr, vbuffers_ptr; struct draw_context *draw = llvm->draw; unsigned i, j; - unsigned chan; struct lp_build_context bld; struct lp_build_loop_state lp_loop; struct lp_type vs_type = lp_type_float_vec(32); @@ -393,12 +401,11 @@ draw_llvm_generate(struct draw_llvm *llvm) struct pipe_vertex_element *velem = &draw->pt.vertex_element[j]; struct pipe_vertex_buffer *vbuf = &draw->pt.vertex_buffer[ velem->vertex_buffer_index]; -LLVMDumpValue(function); generate_fetch(builder, vbuffers_ptr, &aos_attribs[j][i], velem, vbuf, true_index); } } - convert_to_soa(builder, inputs, aos_attribs, + convert_to_soa(builder, aos_attribs, inputs, draw->pt.nr_vertex_elements); generate_vs(llvm, @@ -407,6 +414,7 @@ draw_llvm_generate(struct draw_llvm *llvm) inputs, context_ptr, io); + LLVMDumpModule(llvm->module); } lp_build_loop_end(builder, end, step, &lp_loop); diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c b/src/gallium/auxiliary/draw/draw_llvm_translate.c index 74830f1..260568a 100644 --- a/src/gallium/auxiliary/draw/draw_llvm_translate.c +++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c @@ -436,7 +436,6 @@ fetch(LLVMBuilderRef builder, src_tmp = LLVMBuildLoad(builder, src_tmp, ""); - LLVMDumpValue(src_tmp); /* convert src_tmp to float */ component = func(builder, src_tmp); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: actually set the constant buffers on the context
Module: Mesa Branch: gallium_draw_llvm Commit: b0f946e90069f34e69a0492caa7a2867ae184e9a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0f946e90069f34e69a0492caa7a2867ae184e9a Author: Zack Rusin Date: Tue Mar 30 17:21:11 2010 -0400 draw llvm: actually set the constant buffers on the context --- src/gallium/auxiliary/draw/draw_llvm.c |2 +- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |8 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index cd183d5..1127d54 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -110,7 +110,7 @@ init_globals(struct draw_llvm *llvm) LP_CHECK_STRUCT_SIZE(struct draw_jit_context, llvm->target, context_type); - LLVMAddTypeName(llvm->module, "context", context_type); + LLVMAddTypeName(llvm->module, "draw_jit_context", context_type); llvm->context_ptr_type = LLVMPointerType(context_type, 0); } diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index 38b1c44..f93df37 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -130,6 +130,12 @@ llvm_middle_end_prepare( struct draw_pt_middle_end *middle, *max_vertices = *max_vertices & ~1; draw_llvm_prepare(fpme->llvm); + + /*XXX we only support one constant buffer */ + fpme->llvm->jit_context.vs_constants = + draw->pt.user.vs_constants[0]; + fpme->llvm->jit_context.gs_constants = + draw->pt.user.gs_constants[0]; } @@ -241,7 +247,7 @@ static void llvm_middle_end_linear_run( struct draw_pt_middle_end *middle, fpme->llvm->jit_func( &fpme->llvm->jit_context, pipeline_verts, - draw->pt.user.vbuffer, + (const char **)draw->pt.user.vbuffer, start, count, fpme->vertex_size ); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: fix a warning
Module: Mesa Branch: gallium_draw_llvm Commit: 93e342574f5fc95789028dbe7cf637257562e9bb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=93e342574f5fc95789028dbe7cf637257562e9bb Author: Zack Rusin Date: Tue Mar 30 21:09:51 2010 -0400 draw llvm: fix a warning --- src/gallium/auxiliary/draw/draw_llvm.c |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 1127d54..6347acb 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -391,6 +391,7 @@ draw_llvm_generate(struct draw_llvm *llvm) LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, ""); + const LLVMValueRef (*ptr_aos)[NUM_CHANNELS]; for (i = 0; i < NUM_CHANNELS; ++i) { LLVMValueRef true_index = LLVMBuildAdd( @@ -408,17 +409,17 @@ draw_llvm_generate(struct draw_llvm *llvm) convert_to_soa(builder, aos_attribs, inputs, draw->pt.nr_vertex_elements); + ptr_aos = (const LLVMValueRef (*)[NUM_CHANNELS]) inputs; generate_vs(llvm, builder, outputs, - inputs, + ptr_aos, context_ptr, io); LLVMDumpModule(llvm->module); } lp_build_loop_end(builder, end, step, &lp_loop); - LLVMBuildRetVoid(builder); LLVMDisposeBuilder(builder); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: convert floats to doubles
Module: Mesa Branch: master Commit: 2fb655d1dbb3f8425aeff1597271262661ef206b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fb655d1dbb3f8425aeff1597271262661ef206b Author: Zack Rusin Date: Wed Mar 31 21:30:37 2010 -0400 gallivm: convert floats to doubles printf can't handle floats, convert them to doubles so that we can actually print floats. --- src/gallium/auxiliary/gallivm/lp_bld_printf.c | 11 +-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_printf.c b/src/gallium/auxiliary/gallivm/lp_bld_printf.c index 78c9ec7..e4fa2c2 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_printf.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_printf.c @@ -104,8 +104,15 @@ lp_build_printf(LLVMBuilderRef builder, const char *fmt, ...) params[0] = LLVMBuildGEP(builder, fmtarg, index, 2, ""); va_start(arglist, fmt); - for (i = 1; i <= argcount; i++) - params[i] = va_arg(arglist, LLVMValueRef); + for (i = 1; i <= argcount; i++) { + LLVMValueRef val = va_arg(arglist, LLVMValueRef); + LLVMTypeRef type = LLVMTypeOf(val); + /* printf wants doubles, so lets convert so that + * we can actually print them */ + if (LLVMGetTypeKind(type) == LLVMFloatTypeKind) + val = LLVMBuildFPExt(builder, val, LLVMDoubleType(), ""); + params[i] = val; + } va_end(arglist); return LLVMBuildCall(builder, func_printf, params, argcount + 1, ""); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): 64 new commits
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab5c09738760bc1b665b9809eaf921f4ac27057e Author: Zack Rusin Date: Thu Apr 1 18:58:51 2010 -0400 draw llvm: a lot better storing implementation URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6d052e4fd83d923776320cf5fef66abcd4bf3d0 Merge: ae5487d4276007e466b6a7c783d6fb740f9539c5 2fb655d1dbb3f8425aeff1597271262661ef206b Author: Zack Rusin Date: Wed Mar 31 22:16:09 2010 -0400 Merge remote branch 'origin/master' into gallium_draw_llvm URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fb655d1dbb3f8425aeff1597271262661ef206b Author: Zack Rusin Date: Wed Mar 31 21:30:37 2010 -0400 gallivm: convert floats to doubles printf can't handle floats, convert them to doubles so that we can actually print floats. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ab737557258148d52d9b9e983e4b18560b7a460 Author: Marek Olšák Date: Thu Apr 1 02:21:06 2010 +0200 r300g: add RGBA16F colorbuffer support Disabled by default due to unresolved IP issues. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3252651fb291d7e6e4af5fed8ab461f603574cd6 Author: Marek Olšák Date: Thu Apr 1 02:14:52 2010 +0200 r300g: add RGTC texture support The CS checker already knows about this. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=39e116e3a0dce1a13dbb4395585cd3873e5ed073 Author: Marek Olšák Date: Thu Apr 1 01:13:26 2010 +0200 r300g: format handling cleanup URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f45d43a17fa1f4de50e1cf3e54d3edfdff91399d Author: José Fonseca Date: Wed Mar 31 22:47:11 2010 +0100 softpipe: Use S3TC when avaiilable, URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9388ce41917fa4c706c5e284d960e1ca648ee935 Author: José Fonseca Date: Wed Mar 31 22:46:42 2010 +0100 util: Hook into libtxc_dxtn.so (WIP). URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5d073b39d19c261ffdce21b1adb297182654bd0 Author: José Fonseca Date: Wed Mar 31 21:37:57 2010 +0100 llvmpipe: Don't call unused generate_clamp(). URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=36e92a0494f8a4d2d840d08ffece6719bc8260d6 Author: José Fonseca Date: Wed Mar 31 21:27:07 2010 +0100 libgl-xlib: Fix missing X11 symbols. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=018aae950df449a18d7d69de54d51af587be94c6 Author: José Fonseca Date: Wed Mar 31 21:16:16 2010 +0100 util: Make the accessors bidimensional again. Otherwise there's no way to unpack blocks with height >1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8012643e1f5f6e49593ec8f04d3721df53e6afb Author: Michal Krol Date: Wed Mar 31 21:54:54 2010 +0200 util: First stab at half-float conversion. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=329814c6ee8a87d67a55ecf197af9d6e6fb7ade0 Author: José Fonseca Date: Thu Mar 18 11:27:29 2010 + util: Describe PIPE_FORMAT_NONE as PIPE_FORMAT_R8_USCALED. Avoids the need to special case PIPE_FORMAT_NONE so often. Conflicts: src/gallium/auxiliary/util/u_format_table.py URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fcf2b87b35240efe8dd8ebe7d2f40268e647902 Author: José Fonseca Date: Wed Mar 17 19:50:33 2010 + util: Silence pointer to integer size mismatch errors. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=69895725cfe9d4dc917ff6e643af9e6e3a6e093f Author: José Fonseca Date: Wed Mar 31 20:15:17 2010 +0100 util: Add callback to fetch a single pixel. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3200e708582f75b3566a85228de9a698edbfb022 Author: José Fonseca Date: Wed Mar 31 20:05:10 2010 +0100 python/tests: Read the number of tests to execute from command line. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=96548d80e541691281a947836b673177542fd400 Author: José Fonseca Date: Wed Mar 31 19:53:25 2010 +0100 mesa: Use a consistent name of the external s3tc library for all windows compilers. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=93eee0537f8245c376c5b6b641b3f1d12f993b0f Author: José Fonseca Date: Wed Mar 31 19:43:57 2010 +0100 scons: Force to consider the util/u_format_pack.py for util/u_format_table.c. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf5cd836def660c1040d9f7a0a59aad1c69dbe37 Author: José Fonseca Date: Thu Mar 11 17:52:34 2010 + scons: Don't always include/links X11 headers/libs. Move it into a separate tool. TODO: Needs to be "tooled" in each SConscript that uses it. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6047c89a2309f09a738912280e49db54ba2b2b60 Author: José Fonseca Date: Thu Mar 11 16:50:37 2010 + scons: Don't always link expat. Only needed for DRI. Should be linke
Mesa (gallium_draw_llvm): draw llvm: fix translation of formats with variable components
Module: Mesa Branch: gallium_draw_llvm Commit: 557b75248a3ebc6daabe3c2b69ac24d409aaa1e0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=557b75248a3ebc6daabe3c2b69ac24d409aaa1e0 Author: Zack Rusin Date: Fri Apr 2 15:56:34 2010 -0400 draw llvm: fix translation of formats with variable components --- src/gallium/auxiliary/draw/draw_llvm_translate.c | 13 + 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm_translate.c b/src/gallium/auxiliary/draw/draw_llvm_translate.c index bc17d38..b29ebde 100644 --- a/src/gallium/auxiliary/draw/draw_llvm_translate.c +++ b/src/gallium/auxiliary/draw/draw_llvm_translate.c @@ -428,6 +428,12 @@ fetch(LLVMBuilderRef builder, int offset = 0; LLVMValueRef res = LLVMConstNull( LLVMVectorType(LLVMFloatType(), 4)); + LLVMValueRef defaults[4]; + + defaults[0] = LLVMConstReal(LLVMFloatType(), 0); + defaults[1] = LLVMConstReal(LLVMFloatType(), 0); + defaults[2] = LLVMConstReal(LLVMFloatType(), 0); + defaults[3] = LLVMConstReal(LLVMFloatType(), 1); for (i = 0; i < nr_components; ++i) { LLVMValueRef src_index = LLVMConstInt(LLVMInt32Type(), offset, 0); @@ -447,6 +453,13 @@ fetch(LLVMBuilderRef builder, dst_index, ""); offset += val_size; } + for (; i < 4; ++i) { + LLVMValueRef dst_index = LLVMConstInt(LLVMInt32Type(), i, 0); + res = LLVMBuildInsertElement(builder, + res, + defaults[i], + dst_index, ""); + } return res; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: fix storing of outputs for the rest of the pipeline
Module: Mesa Branch: gallium_draw_llvm Commit: cb31d3b5fec6260142ed27cc37f7155915ecfe89 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb31d3b5fec6260142ed27cc37f7155915ecfe89 Author: Zack Rusin Date: Fri Apr 2 18:52:32 2010 -0400 draw llvm: fix storing of outputs for the rest of the pipeline there's no good way of aligning the output's, and since the vertex_header is variable sized in the first place we need to extract elements from a vector and store them individually into an array. this gets the basic examples working again --- src/gallium/auxiliary/draw/draw_llvm.c | 141 --- src/gallium/auxiliary/draw/draw_llvm.h |2 +- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |2 +- src/gallium/auxiliary/draw/draw_pt_post_vs.c |3 + 4 files changed, 94 insertions(+), 54 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 30058c8..388c991 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -20,48 +20,9 @@ static void init_globals(struct draw_llvm *llvm) { -LLVMTypeRef vertex_header; -LLVMTypeRef texture_type; + LLVMTypeRef texture_type; - /* struct vertex_header */ - { - LLVMTypeRef elem_types[3]; - - elem_types[0] = LLVMIntType(32); - elem_types[1] = LLVMArrayType(LLVMFloatType(), 4); - elem_types[2] = LLVMArrayType(elem_types[1], 0); - - vertex_header = LLVMStructType(elem_types, Elements(elem_types), 0); - - /* these are bit-fields and we can't take address of them - LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_CLIPMASK); - LP_CHECK_MEMBER_OFFSET(struct vertex_header, edgeflag, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_EDGEFLAG); - LP_CHECK_MEMBER_OFFSET(struct vertex_header, pad, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_PAD); - LP_CHECK_MEMBER_OFFSET(struct vertex_header, vertex_id, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_VERTEX_ID); - */ - LP_CHECK_MEMBER_OFFSET(struct vertex_header, clip, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_CLIP); - LP_CHECK_MEMBER_OFFSET(struct vertex_header, data, - llvm->target, vertex_header, - DRAW_JIT_VERTEX_DATA); - - LP_CHECK_STRUCT_SIZE(struct vertex_header, - llvm->target, vertex_header); - - LLVMAddTypeName(llvm->module, "vertex_header", vertex_header); - - llvm->vertex_header_ptr_type = LLVMPointerType(vertex_header, 0); - } - /* struct draw_jit_texture */ + /* struct draw_jit_texture */ { LLVMTypeRef elem_types[4]; @@ -122,6 +83,45 @@ init_globals(struct draw_llvm *llvm) } } +static LLVMTypeRef +create_vertex_header(struct draw_llvm *llvm, int data_elems) +{ + /* struct vertex_header */ + LLVMTypeRef elem_types[3]; + LLVMTypeRef vertex_header; + + elem_types[0] = LLVMIntType(32); + elem_types[1] = LLVMArrayType(LLVMFloatType(), 4); + elem_types[2] = LLVMArrayType(elem_types[1], data_elems); + + vertex_header = LLVMStructType(elem_types, Elements(elem_types), 0); + + /* these are bit-fields and we can't take address of them + LP_CHECK_MEMBER_OFFSET(struct vertex_header, clipmask, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_CLIPMASK); + LP_CHECK_MEMBER_OFFSET(struct vertex_header, edgeflag, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_EDGEFLAG); + LP_CHECK_MEMBER_OFFSET(struct vertex_header, pad, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_PAD); + LP_CHECK_MEMBER_OFFSET(struct vertex_header, vertex_id, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_VERTEX_ID); + */ + LP_CHECK_MEMBER_OFFSET(struct vertex_header, clip, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_CLIP); + LP_CHECK_MEMBER_OFFSET(struct vertex_header, data, + llvm->target, vertex_header, + DRAW_JIT_VERTEX_DATA); + + LLVMAddTypeName(llvm->module, "vertex_header", vertex_header); + + return LLVMPointerType(vertex_header, 0); +} + struct draw_llvm * draw_llvm_create(struct draw_context *draw) { @@ -175,8 +175,9 @@ draw_llvm_destroy(struct draw_llvm *llvm) } void -draw_llvm_prepare(struct draw_llvm *llvm) +draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs) { + llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs)
Mesa (gallium_draw_llvm): draw llvm: when generating the vertex_header struct adjust its name
Module: Mesa Branch: gallium_draw_llvm Commit: 1b0bab167cd541f70c32249ca3e70da88b8c93c5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b0bab167cd541f70c32249ca3e70da88b8c93c5 Author: Zack Rusin Date: Mon Apr 5 16:43:53 2010 -0400 draw llvm: when generating the vertex_header struct adjust its name change the name to not clash and accuretly represent the number of inputs we store in the data member --- src/gallium/auxiliary/draw/draw_llvm.c |5 - 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 388c991..382f765 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -89,6 +89,9 @@ create_vertex_header(struct draw_llvm *llvm, int data_elems) /* struct vertex_header */ LLVMTypeRef elem_types[3]; LLVMTypeRef vertex_header; + char struct_name[24]; + + snprintf(struct_name, 23, "vertex_header%d", data_elems); elem_types[0] = LLVMIntType(32); elem_types[1] = LLVMArrayType(LLVMFloatType(), 4); @@ -117,7 +120,7 @@ create_vertex_header(struct draw_llvm *llvm, int data_elems) llvm->target, vertex_header, DRAW_JIT_VERTEX_DATA); - LLVMAddTypeName(llvm->module, "vertex_header", vertex_header); + LLVMAddTypeName(llvm->module, struct_name, vertex_header); return LLVMPointerType(vertex_header, 0); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: fix loop iteration and vertex header offsets
Module: Mesa Branch: gallium_draw_llvm Commit: 9dd70e7b85ddbc73bd976c4dab81476aa36c557e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9dd70e7b85ddbc73bd976c4dab81476aa36c557e Author: Zack Rusin Date: Tue Apr 6 00:13:20 2010 -0400 draw llvm: fix loop iteration and vertex header offsets the loop was doing a NE comparison which we could have skipped if the prim was triangles (3 verts) and our step was 4 verts. also fix offsets in conversion to aos. --- src/gallium/auxiliary/draw/draw_llvm.c | 44 +-- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |2 - src/gallium/auxiliary/gallivm/lp_bld_flow.c| 29 + src/gallium/auxiliary/gallivm/lp_bld_flow.h|7 +++ 4 files changed, 66 insertions(+), 16 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 382f765..27df596 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -17,6 +17,8 @@ #include +#define DEBUG_STORE 0 + static void init_globals(struct draw_llvm *llvm) { @@ -235,7 +237,7 @@ generate_vs(struct draw_llvm *llvm, NULL/*sampler*/); } - +#if DEBUG_STORE static void print_vectorf(LLVMBuilderRef builder, LLVMValueRef vec) { @@ -251,6 +253,7 @@ static void print_vectorf(LLVMBuilderRef builder, lp_build_printf(builder, "vector = [%f, %f, %f, %f]\n", val[0], val[1], val[2], val[3]); } +#endif static void generate_fetch(LLVMBuilderRef builder, @@ -404,6 +407,9 @@ store_aos(LLVMBuilderRef builder, LLVMBuildStore(builder, LLVMConstInt(LLVMInt32Type(), 0x, 0), id_ptr); +#if DEBUG_STORE + lp_build_printf(builder, " %p storing at %d (%p)\n", io_ptr, index, data_ptr); +#endif #if 0 /*lp_build_printf(builder, " %p storing at %d (%p) ", io_ptr, index, data_ptr); print_vectorf(builder, value);*/ @@ -458,16 +464,10 @@ store_aos_array(LLVMBuilderRef builder, int num_outputs) { LLVMValueRef attr_index = LLVMConstInt(LLVMInt32Type(), attrib, 0); - LLVMValueRef ind0 = start_index; - LLVMValueRef ind1 = - LLVMBuildAdd(builder, start_index, - LLVMConstInt(LLVMInt32Type(), 1, 0), ""); - LLVMValueRef ind2 = - LLVMBuildAdd(builder, start_index, - LLVMConstInt(LLVMInt32Type(), 2, 0), ""); - LLVMValueRef ind3 = - LLVMBuildAdd(builder, start_index, - LLVMConstInt(LLVMInt32Type(), 3, 0), ""); + LLVMValueRef ind0 = LLVMConstInt(LLVMInt32Type(), 0, 0); + LLVMValueRef ind1 = LLVMConstInt(LLVMInt32Type(), 1, 0); + LLVMValueRef ind2 = LLVMConstInt(LLVMInt32Type(), 2, 0); + LLVMValueRef ind3 = LLVMConstInt(LLVMInt32Type(), 3, 0); LLVMValueRef io0_ptr, io1_ptr, io2_ptr, io3_ptr; debug_assert(NUM_CHANNELS == 4); @@ -481,7 +481,10 @@ store_aos_array(LLVMBuilderRef builder, io3_ptr = LLVMBuildGEP(builder, io_ptr, &ind3, 1, ""); - /*lp_build_printf(builder, "io = %d\n", start_index);*/ +#if DEBUG_STORE + lp_build_printf(builder, "io = %d, indexes[%d, %d, %d, %d]\n", + start_index, ind0, ind1, ind2, ind3); +#endif store_aos(builder, io0_ptr, attr_index, aos[0]); store_aos(builder, io1_ptr, attr_index, aos[1]); @@ -499,6 +502,9 @@ convert_to_aos(LLVMBuilderRef builder, { unsigned chan, attrib; +#if DEBUG_STORE + lp_build_printf(builder, " # storing begin\n"); +#endif for (attrib = 0; attrib < num_outputs; ++attrib) { LLVMValueRef soa[4]; LLVMValueRef aos[4]; @@ -522,6 +528,9 @@ convert_to_aos(LLVMBuilderRef builder, attrib, num_outputs); } +#if DEBUG_STORE + lp_build_printf(builder, " # storing end\n"); +#endif } void @@ -586,13 +595,20 @@ draw_llvm_generate(struct draw_llvm *llvm) step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0); +#if DEBUG_STORE + lp_build_printf(builder, "start = %d, end = %d, step = %d\n", + start, end, step); +#endif lp_build_loop_begin(builder, start, &lp_loop); { LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, ""); const LLVMValueRef (*ptr_aos)[NUM_CHANNELS]; - +#if DEBUG_STORE + lp_build_printf(builder, " --- loop counter %d\n", + lp_loop.counter); +#endif for (i = 0; i < NUM_CHANNELS; ++i) { LLVMValueRef true_index = LLVMBuildAdd( builder, @@ -620,7 +636,7 @@ draw_llvm_generate(struct draw_llvm *llvm)
Mesa (gallium_draw_llvm): draw llvm: fix draw arrays
Module: Mesa Branch: gallium_draw_llvm Commit: aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206 Author: Zack Rusin Date: Tue Apr 6 11:00:35 2010 -0400 draw llvm: fix draw arrays we don't index within the outputs but only within the inputs --- src/gallium/auxiliary/draw/draw_llvm.c | 21 ++- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |2 + src/gallium/auxiliary/draw/draw_pt_post_vs.c |2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 27df596..eac5e91 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -408,7 +408,7 @@ store_aos(LLVMBuilderRef builder, 0x, 0), id_ptr); #if DEBUG_STORE - lp_build_printf(builder, " %p storing at %d (%p)\n", io_ptr, index, data_ptr); + lp_build_printf(builder, " %p storing attribute %d (io = %p)\n", data_ptr, index, io_ptr); #endif #if 0 /*lp_build_printf(builder, " %p storing at %d (%p) ", io_ptr, index, data_ptr); @@ -459,7 +459,6 @@ static void store_aos_array(LLVMBuilderRef builder, LLVMValueRef io_ptr, LLVMValueRef aos[NUM_CHANNELS], -LLVMValueRef start_index, int attrib, int num_outputs) { @@ -482,8 +481,8 @@ store_aos_array(LLVMBuilderRef builder, &ind3, 1, ""); #if DEBUG_STORE - lp_build_printf(builder, "io = %d, indexes[%d, %d, %d, %d]\n", - start_index, ind0, ind1, ind2, ind3); + lp_build_printf(builder, "io = %p, indexes[%d, %d, %d, %d]\n", + io_ptr, ind0, ind1, ind2, ind3); #endif store_aos(builder, io0_ptr, attr_index, aos[0]); @@ -497,8 +496,7 @@ convert_to_aos(LLVMBuilderRef builder, LLVMValueRef io, LLVMValueRef (*outputs)[NUM_CHANNELS], int num_outputs, - int max_vertices, - LLVMValueRef start_index) + int max_vertices) { unsigned chan, attrib; @@ -524,7 +522,6 @@ convert_to_aos(LLVMBuilderRef builder, store_aos_array(builder, io, aos, - start_index, attrib, num_outputs); } @@ -542,7 +539,7 @@ draw_llvm_generate(struct draw_llvm *llvm) LLVMBasicBlockRef block; LLVMBuilderRef builder; LLVMValueRef function; - LLVMValueRef start, end, count, stride, step; + LLVMValueRef start, end, count, stride, step, io_itr; LLVMValueRef io_ptr, vbuffers_ptr; struct draw_context *draw = llvm->draw; unsigned i, j; @@ -595,6 +592,7 @@ draw_llvm_generate(struct draw_llvm *llvm) step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0); + io_itr = LLVMConstInt(LLVMInt32Type(), 0, 0); #if DEBUG_STORE lp_build_printf(builder, "start = %d, end = %d, step = %d\n", start, end, step); @@ -603,7 +601,7 @@ draw_llvm_generate(struct draw_llvm *llvm) { LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; - LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &lp_loop.counter, 1, ""); + LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, ""); const LLVMValueRef (*ptr_aos)[NUM_CHANNELS]; #if DEBUG_STORE lp_build_printf(builder, " --- loop counter %d\n", @@ -634,7 +632,10 @@ draw_llvm_generate(struct draw_llvm *llvm) convert_to_aos(builder, io, outputs, draw->vs.vertex_shader->info.num_outputs, - max_vertices, lp_loop.counter); + max_vertices); + + io_itr = LLVMBuildAdd(builder, io_itr, +LLVMConstInt(LLVMInt32Type(), 1, 0), ""); } lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop); diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index aebfe40..307e6cc 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -245,6 +245,8 @@ static void llvm_middle_end_linear_run( struct draw_pt_middle_end *middle, return; } + debug_printf(" Pipeline = %p (data = %p)\n", +pipeline_verts, pipeline_verts->data); fpme->llvm->jit_func( &fpme->llvm->jit_context, pipeline_verts, (const char **)draw->pt.user.vbuff
Mesa (gallium_draw_llvm): draw llvm: iterate with the correct stop over the outputs
Module: Mesa Branch: gallium_draw_llvm Commit: de0647dbad96db222b5643d03b3f61b093e7ef76 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de0647dbad96db222b5643d03b3f61b093e7ef76 Author: Zack Rusin Date: Tue Apr 6 12:07:33 2010 -0400 draw llvm: iterate with the correct stop over the outputs it's whatever the var step is (4 usually) not an unconditional 1 --- src/gallium/auxiliary/draw/draw_llvm.c |3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index eac5e91..021662e 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -634,8 +634,7 @@ draw_llvm_generate(struct draw_llvm *llvm) draw->vs.vertex_shader->info.num_outputs, max_vertices); - io_itr = LLVMBuildAdd(builder, io_itr, -LLVMConstInt(LLVMInt32Type(), 1, 0), ""); + io_itr = LLVMBuildAdd(builder, io_itr, step, ""); } lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: fix iteration for larger vertex arrays
Module: Mesa Branch: gallium_draw_llvm Commit: 1e0bf24139f6047f505b138392fc0f1d6584d6bc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e0bf24139f6047f505b138392fc0f1d6584d6bc Author: Zack Rusin Date: Tue Apr 6 12:37:31 2010 -0400 draw llvm: fix iteration for larger vertex arrays we were trying to store the outputs starting at the same offset we were using for the input arrays, which was writing beyond the end of the output array. --- src/gallium/auxiliary/draw/draw_llvm.c | 16 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 021662e..a09e2a9 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -17,7 +17,7 @@ #include -#define DEBUG_STORE 0 +#define DEBUG_STORE 1 static void init_globals(struct draw_llvm *llvm) @@ -481,7 +481,7 @@ store_aos_array(LLVMBuilderRef builder, &ind3, 1, ""); #if DEBUG_STORE - lp_build_printf(builder, "io = %p, indexes[%d, %d, %d, %d]\n", + lp_build_printf(builder, " io = %p, indexes[%d, %d, %d, %d]\n", io_ptr, ind0, ind1, ind2, ind3); #endif @@ -592,7 +592,6 @@ draw_llvm_generate(struct draw_llvm *llvm) step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0); - io_itr = LLVMConstInt(LLVMInt32Type(), 0, 0); #if DEBUG_STORE lp_build_printf(builder, "start = %d, end = %d, step = %d\n", start, end, step); @@ -601,11 +600,14 @@ draw_llvm_generate(struct draw_llvm *llvm) { LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; - LLVMValueRef io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, ""); + LLVMValueRef io; const LLVMValueRef (*ptr_aos)[NUM_CHANNELS]; + + io_itr = LLVMBuildSub(builder, lp_loop.counter, start, ""); + io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, ""); #if DEBUG_STORE - lp_build_printf(builder, " --- loop counter %d\n", - lp_loop.counter); + lp_build_printf(builder, " --- io %d = %p, loop counter %d\n", + io_itr, io, lp_loop.counter); #endif for (i = 0; i < NUM_CHANNELS; ++i) { LLVMValueRef true_index = LLVMBuildAdd( @@ -633,8 +635,6 @@ draw_llvm_generate(struct draw_llvm *llvm) convert_to_aos(builder, io, outputs, draw->vs.vertex_shader->info.num_outputs, max_vertices); - - io_itr = LLVMBuildAdd(builder, io_itr, step, ""); } lp_build_loop_end_cond(builder, end, step, LLVMIntUGE, &lp_loop); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): draw llvm: implement simple pipeline caching using variants
Module: Mesa Branch: gallium_draw_llvm Commit: 323fdd8ae5baf16df6c57754e58adc8e22d28e10 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=323fdd8ae5baf16df6c57754e58adc8e22d28e10 Author: Zack Rusin Date: Tue Apr 6 16:28:48 2010 -0400 draw llvm: implement simple pipeline caching using variants --- src/gallium/auxiliary/draw/draw_llvm.c | 75 ++-- src/gallium/auxiliary/draw/draw_llvm.h | 27 ++-- .../draw/draw_pt_fetch_shade_pipeline_llvm.c | 36 -- 3 files changed, 103 insertions(+), 35 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index a09e2a9..26f756c 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -17,7 +17,12 @@ #include -#define DEBUG_STORE 1 +#define DEBUG_STORE 0 + + +/* generates the draw jit function */ +static void +draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *var); static void init_globals(struct draw_llvm *llvm) @@ -179,11 +184,18 @@ draw_llvm_destroy(struct draw_llvm *llvm) free(llvm); } -void +struct draw_llvm_variant * draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs) { + struct draw_llvm_variant *variant = MALLOC(sizeof(struct draw_llvm_variant)); + + draw_llvm_make_variant_key(llvm, &variant->key); + llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs); - draw_llvm_generate(llvm); + + draw_llvm_generate(llvm, variant); + + return variant; } @@ -530,15 +542,14 @@ convert_to_aos(LLVMBuilderRef builder, #endif } -void -draw_llvm_generate(struct draw_llvm *llvm) +static void +draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant) { LLVMTypeRef arg_types[6]; LLVMTypeRef func_type; LLVMValueRef context_ptr; LLVMBasicBlockRef block; LLVMBuilderRef builder; - LLVMValueRef function; LLVMValueRef start, end, count, stride, step, io_itr; LLVMValueRef io_ptr, vbuffers_ptr; struct draw_context *draw = llvm->draw; @@ -558,18 +569,18 @@ draw_llvm_generate(struct draw_llvm *llvm) func_type = LLVMFunctionType(LLVMVoidType(), arg_types, Elements(arg_types), 0); - function = LLVMAddFunction(llvm->module, "draw_llvm_shader", func_type); - LLVMSetFunctionCallConv(function, LLVMCCallConv); + variant->function = LLVMAddFunction(llvm->module, "draw_llvm_shader", func_type); + LLVMSetFunctionCallConv(variant->function, LLVMCCallConv); for(i = 0; i < Elements(arg_types); ++i) if(LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind) - LLVMAddAttribute(LLVMGetParam(function, i), LLVMNoAliasAttribute); + LLVMAddAttribute(LLVMGetParam(variant->function, i), LLVMNoAliasAttribute); - context_ptr = LLVMGetParam(function, 0); - io_ptr = LLVMGetParam(function, 1); - vbuffers_ptr = LLVMGetParam(function, 2); - start= LLVMGetParam(function, 3); - count= LLVMGetParam(function, 4); - stride = LLVMGetParam(function, 5); + context_ptr = LLVMGetParam(variant->function, 0); + io_ptr = LLVMGetParam(variant->function, 1); + vbuffers_ptr = LLVMGetParam(variant->function, 2); + start= LLVMGetParam(variant->function, 3); + count= LLVMGetParam(variant->function, 4); + stride = LLVMGetParam(variant->function, 5); lp_build_name(context_ptr, "context"); lp_build_name(io_ptr, "io"); @@ -582,7 +593,7 @@ draw_llvm_generate(struct draw_llvm *llvm) * Function body */ - block = LLVMAppendBasicBlock(function, "entry"); + block = LLVMAppendBasicBlock(variant->function, "entry"); builder = LLVMCreateBuilder(); LLVMPositionBuilderAtEnd(builder, block); @@ -647,20 +658,40 @@ draw_llvm_generate(struct draw_llvm *llvm) */ #ifdef DEBUG - if(LLVMVerifyFunction(function, LLVMPrintMessageAction)) { - LLVMDumpValue(function); + if(LLVMVerifyFunction(variant->function, LLVMPrintMessageAction)) { + LLVMDumpValue(variant->function); assert(0); } #endif - LLVMRunFunctionPassManager(llvm->pass, function); + LLVMRunFunctionPassManager(llvm->pass, variant->function); if (1) { - LLVMDumpValue(function); + LLVMDumpValue(variant->function); debug_printf("\n"); } - llvm->jit_func = (draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, function); + variant->jit_func = (draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, variant->function); if (1) - lp_disassemble(llvm->jit_func); + lp_disassemble(variant->jit_func); +} + +void +draw_llvm_make_variant_key(struct draw_llvm *llvm, + struct draw_llvm_variant_key *key) +{ + key->nr_vertex_buffers = llvm->draw->pt
Mesa (gallium_draw_llvm): draw llvm: disable debugging output
Module: Mesa Branch: gallium_draw_llvm Commit: 06bda76c08618eaf68de70f4f776329e6ef1f196 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=06bda76c08618eaf68de70f4f776329e6ef1f196 Author: Zack Rusin Date: Tue Apr 6 17:14:13 2010 -0400 draw llvm: disable debugging output --- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |2 ++ src/gallium/auxiliary/draw/draw_pt_post_vs.c |2 ++ 2 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index 0ed043d..d2ed0eb 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -264,8 +264,10 @@ static void llvm_middle_end_linear_run( struct draw_pt_middle_end *middle, return; } +#if 0 debug_printf(" Pipeline = %p (data = %p)\n", pipeline_verts, pipeline_verts->data); +#endif fpme->current_variant->jit_func( &fpme->llvm->jit_context, pipeline_verts, (const char **)draw->pt.user.vbuffer, diff --git a/src/gallium/auxiliary/draw/draw_pt_post_vs.c b/src/gallium/auxiliary/draw/draw_pt_post_vs.c index af07926..5525dfc 100644 --- a/src/gallium/auxiliary/draw/draw_pt_post_vs.c +++ b/src/gallium/auxiliary/draw/draw_pt_post_vs.c @@ -108,8 +108,10 @@ static boolean post_vs_cliptest_viewport_gl( struct pt_post_vs *pvs, for (j = 0; j < count; j++) { float *position = out->data[pos]; +#if 0 debug_printf("%d) io = %p, data = %p = [%f, %f, %f, %f]\n", j, out, position, position[0], position[1], position[2], position[3]); +#endif out->clip[0] = position[0]; out->clip[1] = position[1]; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (gallium_draw_llvm): llvmpipe: use a define to decide whether to use draw llvm paths
Module: Mesa Branch: gallium_draw_llvm Commit: 695a029e9b8c70a34c5cde01ab32ac377e513707 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=695a029e9b8c70a34c5cde01ab32ac377e513707 Author: Zack Rusin Date: Tue Apr 6 17:14:30 2010 -0400 llvmpipe: use a define to decide whether to use draw llvm paths right now disabled by default --- src/gallium/drivers/llvmpipe/lp_context.c |6 +- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index 383e4b0..5c476f6 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -47,7 +47,7 @@ #include "lp_setup.h" - +#define USE_DRAW_LLVM 0 static void llvmpipe_destroy( struct pipe_context *pipe ) @@ -182,7 +182,11 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv ) /* * Create drawing context and plug our rendering stage into it. */ +#if USE_DRAW_LLVM llvmpipe->draw = draw_create_with_llvm(llvmscreen->engine); +#else + llvmpipe->draw = draw_create(); +#endif if (!llvmpipe->draw) goto fail; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): 23 new commits
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae69f9fbf0a1aab7186e5b644085a5fe5aea99af Merge: fe130a7e5e3e7cc31e070d8088203706c687e6e8 695a029e9b8c70a34c5cde01ab32ac377e513707 Author: Zack Rusin Date: Tue Apr 6 20:09:08 2010 -0400 Merge branch 'gallium_draw_llvm' URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=695a029e9b8c70a34c5cde01ab32ac377e513707 Author: Zack Rusin Date: Tue Apr 6 17:14:30 2010 -0400 llvmpipe: use a define to decide whether to use draw llvm paths right now disabled by default URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=06bda76c08618eaf68de70f4f776329e6ef1f196 Author: Zack Rusin Date: Tue Apr 6 17:14:13 2010 -0400 draw llvm: disable debugging output URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=323fdd8ae5baf16df6c57754e58adc8e22d28e10 Author: Zack Rusin Date: Tue Apr 6 16:28:48 2010 -0400 draw llvm: implement simple pipeline caching using variants URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1e0bf24139f6047f505b138392fc0f1d6584d6bc Author: Zack Rusin Date: Tue Apr 6 12:37:31 2010 -0400 draw llvm: fix iteration for larger vertex arrays we were trying to store the outputs starting at the same offset we were using for the input arrays, which was writing beyond the end of the output array. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de0647dbad96db222b5643d03b3f61b093e7ef76 Author: Zack Rusin Date: Tue Apr 6 12:07:33 2010 -0400 draw llvm: iterate with the correct stop over the outputs it's whatever the var step is (4 usually) not an unconditional 1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=aeaf2cf18fc74f2d65fcadfad8c19f244ccd4206 Author: Zack Rusin Date: Tue Apr 6 11:00:35 2010 -0400 draw llvm: fix draw arrays we don't index within the outputs but only within the inputs URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9dd70e7b85ddbc73bd976c4dab81476aa36c557e Author: Zack Rusin Date: Tue Apr 6 00:13:20 2010 -0400 draw llvm: fix loop iteration and vertex header offsets the loop was doing a NE comparison which we could have skipped if the prim was triangles (3 verts) and our step was 4 verts. also fix offsets in conversion to aos. URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b0bab167cd541f70c32249ca3e70da88b8c93c5 Author: Zack Rusin Date: Mon Apr 5 16:43:53 2010 -0400 draw llvm: when generating the vertex_header struct adjust its name change the name to not clash and accuretly represent the number of inputs we store in the data member URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb31d3b5fec6260142ed27cc37f7155915ecfe89 Author: Zack Rusin Date: Fri Apr 2 18:52:32 2010 -0400 draw llvm: fix storing of outputs for the rest of the pipeline there's no good way of aligning the output's, and since the vertex_header is variable sized in the first place we need to extract elements from a vector and store them individually into an array. this gets the basic examples working again URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=557b75248a3ebc6daabe3c2b69ac24d409aaa1e0 Author: Zack Rusin Date: Fri Apr 2 15:56:34 2010 -0400 draw llvm: fix translation of formats with variable components URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab5c09738760bc1b665b9809eaf921f4ac27057e Author: Zack Rusin Date: Thu Apr 1 18:58:51 2010 -0400 draw llvm: a lot better storing implementation URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b6d052e4fd83d923776320cf5fef66abcd4bf3d0 Merge: ae5487d4276007e466b6a7c783d6fb740f9539c5 2fb655d1dbb3f8425aeff1597271262661ef206b Author: Zack Rusin Date: Wed Mar 31 22:16:09 2010 -0400 Merge remote branch 'origin/master' into gallium_draw_llvm URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae5487d4276007e466b6a7c783d6fb740f9539c5 Author: Zack Rusin Date: Wed Mar 31 22:15:12 2010 -0400 draw llvm: fix iteration over buffers fetching was converting garbage URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=880e3fb09b538f6f0b6fad2db7e0e10e9df43555 Merge: 93e342574f5fc95789028dbe7cf637257562e9bb 4afed821baa6993d85a07c67d42ea40d4e9a600a Author: Zack Rusin Date: Tue Mar 30 21:10:33 2010 -0400 Merge remote branch 'origin/master' into gallium_draw_llvm URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=93e342574f5fc95789028dbe7cf637257562e9bb Author: Zack Rusin Date: Tue Mar 30 21:09:51 2010 -0400 draw llvm: fix a warning URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b0f946e90069f34e69a0492caa7a2867ae184e9a Author: Zack Rusin Date: Tue Mar 30 17:21:11 2010 -0400 draw llvm: actually set the constant buffers on the context URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bc07fc83e344c9e693bde
Mesa (master): draw llvm: disable printing of the LLVM ir
Module: Mesa Branch: master Commit: 1570760a9756234978ff56a9db4c781a630fe6ce URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1570760a9756234978ff56a9db4c781a630fe6ce Author: Zack Rusin Date: Tue Apr 6 20:27:17 2010 -0400 draw llvm: disable printing of the LLVM ir --- src/gallium/auxiliary/draw/draw_llvm.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 26f756c..121cce3 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -666,13 +666,13 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant) LLVMRunFunctionPassManager(llvm->pass, variant->function); - if (1) { + if (0) { LLVMDumpValue(variant->function); debug_printf("\n"); } variant->jit_func = (draw_jit_vert_func)LLVMGetPointerToGlobal(llvm->draw->engine, variant->function); - if (1) + if (0) lp_disassemble(variant->jit_func); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): scons: define DRAW_LLVM if we're building it
Module: Mesa Branch: master Commit: c60a161cc5c92b495007cbd3f709a5b9405e019a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c60a161cc5c92b495007cbd3f709a5b9405e019a Author: Zack Rusin Date: Tue Apr 6 22:41:11 2010 -0400 scons: define DRAW_LLVM if we're building it --- SConstruct |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/SConstruct b/SConstruct index d9230bd..56d88cc 100644 --- a/SConstruct +++ b/SConstruct @@ -88,6 +88,8 @@ if drawllvm: env.Tool('llvm') if not env.has_key('LLVM_VERSION'): drawllvm = False +if drawllvm: +env.Append(CFLAGS = ['-DDRAW_LLVM=1']) # derived options x86 = machine == 'x86' ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw llvm: highly reduce the compilation times for draw llvm
Module: Mesa Branch: master Commit: 821abff8c03031603111abc17dabe7cfa28a31e1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=821abff8c03031603111abc17dabe7cfa28a31e1 Author: Zack Rusin Date: Wed Apr 7 17:46:55 2010 -0400 draw llvm: highly reduce the compilation times for draw llvm our code resets pipe_vertex_buffer's with different offsets when rendering vbo, meaning that we kept creating insane number of shaders even for simple apps e.g. geartrain had 54 shaders and it was taking almost 27 seconds just to compile them. this patch passes pipe_vertex_buffer's to the jit function and lets it to the stride/buffer_offset computation at run time. the slowdown at runtime is largely unnoticable but the we go from 54 shaders to 3, and from 27 seconds to less than 1. --- src/gallium/auxiliary/draw/draw_llvm.c | 59 ++- src/gallium/auxiliary/draw/draw_llvm.h | 58 +++- .../draw/draw_pt_fetch_shade_pipeline_llvm.c |6 ++- 3 files changed, 56 insertions(+), 67 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 3a4e14c..be73a67 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -90,6 +90,29 @@ init_globals(struct draw_llvm *llvm) LLVMTypeRef buffer_ptr = LLVMPointerType(LLVMIntType(8), 0); llvm->buffer_ptr_type = LLVMPointerType(buffer_ptr, 0); } + /* struct pipe_vertex_buffer */ + { + LLVMTypeRef elem_types[4]; + LLVMTypeRef vb_type; + + elem_types[0] = LLVMInt32Type(); + elem_types[1] = LLVMInt32Type(); + elem_types[2] = LLVMInt32Type(); + elem_types[3] = LLVMPointerType(LLVMOpaqueType(), 0); /* vs_constants */ + + vb_type = LLVMStructType(elem_types, Elements(elem_types), 0); + + LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, stride, + llvm->target, vb_type, 0); + LP_CHECK_MEMBER_OFFSET(struct pipe_vertex_buffer, buffer_offset, + llvm->target, vb_type, 2); + LP_CHECK_STRUCT_SIZE(struct pipe_vertex_buffer, + llvm->target, vb_type); + + LLVMAddTypeName(llvm->module, "pipe_vertex_buffer", vb_type); + + llvm->vb_ptr_type = LLVMPointerType(vb_type, 0); + } } static LLVMTypeRef @@ -241,7 +264,7 @@ generate_vs(struct draw_llvm *llvm, num_vs = 4; /* number of vertices per block */ #endif - tgsi_dump(tokens, 0); + /*tgsi_dump(tokens, 0);*/ lp_build_tgsi_soa(builder, tokens, vs_type, @@ -276,20 +299,22 @@ generate_fetch(LLVMBuilderRef builder, LLVMValueRef vbuffers_ptr, LLVMValueRef *res, struct pipe_vertex_element *velem, - struct pipe_vertex_buffer *vbuf, + LLVMValueRef vbuf, LLVMValueRef index) { LLVMValueRef indices = LLVMConstInt(LLVMInt64Type(), velem->vertex_buffer_index, 0); LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr, &indices, 1, ""); + LLVMValueRef vb_stride = draw_jit_vbuffer_stride(builder, vbuf); + LLVMValueRef vb_buffer_offset = draw_jit_vbuffer_offset(builder, vbuf); LLVMValueRef stride = LLVMBuildMul(builder, - LLVMConstInt(LLVMInt32Type(), vbuf->stride, 0), + vb_stride, index, ""); vbuffer_ptr = LLVMBuildLoad(builder, vbuffer_ptr, "vbuffer"); stride = LLVMBuildAdd(builder, stride, - LLVMConstInt(LLVMInt32Type(), vbuf->buffer_offset, 0), + vb_buffer_offset, ""); stride = LLVMBuildAdd(builder, stride, LLVMConstInt(LLVMInt32Type(), velem->src_offset, 0), @@ -549,13 +574,13 @@ convert_to_aos(LLVMBuilderRef builder, static void draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant) { - LLVMTypeRef arg_types[6]; + LLVMTypeRef arg_types[7]; LLVMTypeRef func_type; LLVMValueRef context_ptr; LLVMBasicBlockRef block; LLVMBuilderRef builder; LLVMValueRef start, end, count, stride, step, io_itr; - LLVMValueRef io_ptr, vbuffers_ptr; + LLVMValueRef io_ptr, vbuffers_ptr, vb_ptr; struct draw_context *draw = llvm->draw; unsigned i, j; struct lp_build_context bld; @@ -570,6 +595,7 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant) arg_types[3] = LLVMInt32Type(); /* start */ arg_types[4] = LLVMInt32Type(); /* count */ arg_types[5] = LLVMInt32Type(); /* stride */ + arg_types[6] = llvm->vb_ptr_type;/* pipe_vert
Mesa (master): draw llvm: hook up the generated function into the draw elts path
Module: Mesa Branch: master Commit: 074084d5639dc0eba93d3497a5618e018b8b7433 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=074084d5639dc0eba93d3497a5618e018b8b7433 Author: Zack Rusin Date: Thu Apr 8 10:53:21 2010 -0400 draw llvm: hook up the generated function into the draw elts path we were only using the jited function in the linear case, now drawelts correctly uses the same path. it results in a significant gain in real world apps (openarena went from 23fps to 29fps) --- .../draw/draw_pt_fetch_shade_pipeline_llvm.c | 40 +++ 1 files changed, 7 insertions(+), 33 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c index 42dcc08..f71271b 100644 --- a/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c +++ b/src/gallium/auxiliary/draw/draw_pt_fetch_shade_pipeline_llvm.c @@ -314,8 +314,6 @@ llvm_middle_end_linear_run_elts( struct draw_pt_middle_end *middle, { struct llvm_middle_end *fpme = (struct llvm_middle_end *)middle; struct draw_context *draw = fpme->draw; - struct draw_vertex_shader *shader = draw->vs.vertex_shader; - struct draw_geometry_shader *geometry_shader = draw->gs.geometry_shader; unsigned opt = fpme->opt; unsigned alloc_count = align( count, 4 ); @@ -325,37 +323,13 @@ llvm_middle_end_linear_run_elts( struct draw_pt_middle_end *middle, if (!pipeline_verts) return FALSE; - /* Fetch into our vertex buffer -*/ - draw_pt_fetch_run_linear( fpme->fetch, - start, - count, - (char *)pipeline_verts ); - - /* Run the shader, note that this overwrites the data[] parts of -* the pipeline verts. If there is no shader, ie if -* bypass_vs_clip_and_viewport, then the inputs == outputs, and are -* already in the correct place. -*/ - if (opt & PT_SHADE) - { - shader->run_linear(shader, -(const float (*)[4])pipeline_verts->data, -( float (*)[4])pipeline_verts->data, -draw->pt.user.vs_constants, -count, -fpme->vertex_size, -fpme->vertex_size); - - if (geometry_shader) - draw_geometry_shader_run(geometry_shader, - (const float (*)[4])pipeline_verts->data, - ( float (*)[4])pipeline_verts->data, - draw->pt.user.gs_constants, - count, - fpme->vertex_size, - fpme->vertex_size); - } + fpme->current_variant->jit_func( &fpme->llvm->jit_context, +pipeline_verts, +(const char **)draw->pt.user.vbuffer, +start, +count, +fpme->vertex_size, +draw->pt.vertex_buffer ); if (draw_pt_post_vs_run( fpme->post_vs, pipeline_verts, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Re: Mesa (master): gallium/util: add fast half float conversion functions
On Thursday 01 April 2010 07:33:26 Micha?? Kr??l wrote: > Module: Mesa > Branch: master > Commit: 3ff175d6de89ad92d167362355501f99d06f0f97 > URL: > http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ff175d6de89ad92d16736235 > 5501f99d06f0f97 > > Author: Luca Barbieri > Date: Wed Mar 24 18:12:45 2010 +0100 > > gallium/util: add fast half float conversion functions > src/gallium/auxiliary/util/u_half.c | 123 > +++ > src/gallium/auxiliary/util/u_half.h | > 55 ++ Can you please fix the indention on those two files? ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw llvm: fix constructor mess
Module: Mesa Branch: master Commit: 7c4208c3a0f48955720f41b3cb320a120c505ba6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7c4208c3a0f48955720f41b3cb320a120c505ba6 Author: Zack Rusin Date: Mon Apr 19 12:46:08 2010 -0400 draw llvm: fix constructor mess use just one constructor to figure out whether to use llvm. --- src/gallium/auxiliary/draw/draw_context.c |8 src/gallium/auxiliary/draw/draw_context.h |7 --- src/gallium/auxiliary/draw/draw_llvm.c| 22 +- src/gallium/drivers/llvmpipe/lp_context.c |8 4 files changed, 9 insertions(+), 36 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index 5726444..0d8f880 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -38,6 +38,9 @@ #include "draw_vs.h" #include "draw_gs.h" +#if HAVE_LLVM +#include "gallivm/lp_bld_init.h" +#endif struct draw_context *draw_create( struct pipe_context *pipe ) { @@ -45,6 +48,11 @@ struct draw_context *draw_create( struct pipe_context *pipe ) if (draw == NULL) goto fail; +#if HAVE_LLVM + assert(lp_build_engine); + draw->engine = lp_build_engine; +#endif + if (!draw_init(draw)) goto fail; diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h index 0d32830..51767bb 100644 --- a/src/gallium/auxiliary/draw/draw_context.h +++ b/src/gallium/auxiliary/draw/draw_context.h @@ -197,11 +197,4 @@ boolean draw_need_pipeline(const struct draw_context *draw, const struct pipe_rasterizer_state *rasterizer, unsigned prim ); -#ifdef HAVE_LLVM -/*** - * LLVM integration - */ -struct draw_context *draw_create_with_llvm(void); -#endif - #endif /* DRAW_CONTEXT_H */ diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index a5403a4..e3ef9e4 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -196,7 +196,7 @@ draw_llvm_create(struct draw_context *draw) init_globals(llvm); -#if 1 +#if 0 LLVMDumpModule(llvm->module); #endif @@ -223,26 +223,6 @@ draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs) return variant; } - -struct draw_context *draw_create_with_llvm(void) -{ - struct draw_context *draw = CALLOC_STRUCT( draw_context ); - if (draw == NULL) - goto fail; - - assert(lp_build_engine); - draw->engine = lp_build_engine; - - if (!draw_init(draw)) - goto fail; - - return draw; - -fail: - draw_destroy( draw ); - return NULL; -} - static void generate_vs(struct draw_llvm *llvm, LLVMBuilderRef builder, diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index efdc245..f7cf06d 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -45,10 +45,6 @@ #include "lp_query.h" #include "lp_setup.h" - -#define USE_DRAW_LLVM 1 - - static void llvmpipe_destroy( struct pipe_context *pipe ) { struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe ); @@ -162,11 +158,7 @@ llvmpipe_create_context( struct pipe_screen *screen, void *priv ) /* * Create drawing context and plug our rendering stage into it. */ -#if USE_DRAW_LLVM - llvmpipe->draw = draw_create_with_llvm(&llvmpipe->pipe); -#else llvmpipe->draw = draw_create(&llvmpipe->pipe); -#endif if (!llvmpipe->draw) goto fail; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): llvmpipe: enable draw llvm by default
Module: Mesa Branch: master Commit: deee1523639b4b59841ecbbdebe6797541e0e7d1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=deee1523639b4b59841ecbbdebe6797541e0e7d1 Author: Zack Rusin Date: Fri Apr 9 19:17:04 2010 -0400 llvmpipe: enable draw llvm by default --- src/gallium/drivers/llvmpipe/lp_context.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index 900740e..efdc245 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -46,7 +46,7 @@ #include "lp_setup.h" -#define USE_DRAW_LLVM 0 +#define USE_DRAW_LLVM 1 static void llvmpipe_destroy( struct pipe_context *pipe ) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw llvm: allow runtime switching of pipelines (yes/ no to llvm)
Module: Mesa Branch: master Commit: 4df3e76949e1ca7b29f844ad9a715b442396a024 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4df3e76949e1ca7b29f844ad9a715b442396a024 Author: Zack Rusin Date: Mon Apr 19 12:52:25 2010 -0400 draw llvm: allow runtime switching of pipelines (yes/no to llvm) use DRAW_USE_LLVM to disable or enable (default) llvm --- src/gallium/auxiliary/draw/draw_private.h |1 + src/gallium/auxiliary/draw/draw_pt.c |4 +++- 2 files changed, 4 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index e250b3a..2ef05ce 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -251,6 +251,7 @@ struct draw_context #ifdef HAVE_LLVM LLVMExecutionEngineRef engine; + bool use_llvm; #endif void *driver_private; }; diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c index 43f6c56..f803e6d 100644 --- a/src/gallium/auxiliary/draw/draw_pt.c +++ b/src/gallium/auxiliary/draw/draw_pt.c @@ -123,6 +123,7 @@ boolean draw_pt_init( struct draw_context *draw ) { draw->pt.test_fse = debug_get_bool_option("DRAW_FSE", FALSE); draw->pt.no_fse = debug_get_bool_option("DRAW_NO_FSE", FALSE); + draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE); draw->pt.front.vcache = draw_pt_vcache( draw ); if (!draw->pt.front.vcache) @@ -141,7 +142,8 @@ boolean draw_pt_init( struct draw_context *draw ) return FALSE; #if HAVE_LLVM - draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw ); + if (draw->use_llvm) + draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw ); #else draw->pt.middle.general = NULL; #endif ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw llvm: fix typo (boolean, not bool)
Module: Mesa Branch: master Commit: e3e5faba89996c64f6d5b5a00b9028900ddbd64f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3e5faba89996c64f6d5b5a00b9028900ddbd64f Author: Zack Rusin Date: Mon Apr 19 13:30:16 2010 -0400 draw llvm: fix typo (boolean, not bool) --- src/gallium/auxiliary/draw/draw_private.h |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index 2ef05ce..fa20c8e 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -251,7 +251,7 @@ struct draw_context #ifdef HAVE_LLVM LLVMExecutionEngineRef engine; - bool use_llvm; + boolean use_llvm; #endif void *driver_private; }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): draw llvm: make sure use_llvm isn't used when not defined
Module: Mesa Branch: master Commit: 7dfde3aadc7f776abf828e4c45dbce2177564a53 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7dfde3aadc7f776abf828e4c45dbce2177564a53 Author: Zack Rusin Date: Mon Apr 19 13:33:49 2010 -0400 draw llvm: make sure use_llvm isn't used when not defined --- src/gallium/auxiliary/draw/draw_pt.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c index f803e6d..cea186c 100644 --- a/src/gallium/auxiliary/draw/draw_pt.c +++ b/src/gallium/auxiliary/draw/draw_pt.c @@ -123,7 +123,6 @@ boolean draw_pt_init( struct draw_context *draw ) { draw->pt.test_fse = debug_get_bool_option("DRAW_FSE", FALSE); draw->pt.no_fse = debug_get_bool_option("DRAW_NO_FSE", FALSE); - draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE); draw->pt.front.vcache = draw_pt_vcache( draw ); if (!draw->pt.front.vcache) @@ -142,6 +141,7 @@ boolean draw_pt_init( struct draw_context *draw ) return FALSE; #if HAVE_LLVM + draw->use_llvm = debug_get_bool_option("DRAW_USE_LLVM", TRUE); if (draw->use_llvm) draw->pt.middle.general = draw_pt_fetch_pipeline_or_emit_llvm( draw ); #else ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: make sure we return the correct type when approximating log's
Module: Mesa Branch: master Commit: 63aa9b505a2439399af3e6ed47c5a0b1b791fba8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=63aa9b505a2439399af3e6ed47c5a0b1b791fba8 Author: Zack Rusin Date: Thu Apr 22 13:00:48 2010 -0400 gallivm: make sure we return the correct type when approximating log's --- src/gallium/auxiliary/gallivm/lp_bld_arit.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c index 8e8fccc..d696763 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c @@ -1502,8 +1502,10 @@ lp_build_log2_approx(struct lp_build_context *bld, res = LLVMBuildAdd(bld->builder, logmant, logexp, ""); } - if(p_exp) + if(p_exp) { + exp = LLVMConstBitCast(exp, vec_type); *p_exp = exp; + } if(p_floor_log2) *p_floor_log2 = logexp; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: fix nested break statemants
Module: Mesa Branch: master Commit: 3a423dcf9dfa725a4e5dca60f0f2b02599d2ed9b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a423dcf9dfa725a4e5dca60f0f2b02599d2ed9b Author: Zack Rusin Date: Thu Apr 22 13:43:37 2010 -0400 gallivm: fix nested break statemants --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 44f8aec..b87817d 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -232,6 +232,8 @@ static void lp_exec_bgnloop(struct lp_exec_mask *mask) mask->break_mask = LLVMConstAllOnes(mask->int_vec_type); if (mask->cond_stack_size == 0) mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type); + + mask->break_stack[mask->break_stack_size++] = mask->break_mask; mask->loop_stack[mask->loop_stack_size++] = mask->loop_block; mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop"); LLVMBuildBr(mask->bld->builder, mask->loop_block); @@ -246,7 +248,6 @@ static void lp_exec_break(struct lp_exec_mask *mask) mask->exec_mask, "break"); - mask->break_stack[mask->break_stack_size++] = mask->break_mask; if (mask->break_stack_size > 1) { mask->break_mask = LLVMBuildAnd(mask->bld->builder, mask->break_mask, @@ -304,7 +305,7 @@ static void lp_exec_endloop(struct lp_exec_mask *mask) mask->cont_mask = mask->cont_stack[--mask->cont_stack_size]; } if (mask->break_stack_size) { - mask->break_mask = mask->cont_stack[--mask->break_stack_size]; + mask->break_mask = mask->break_stack[--mask->break_stack_size]; } lp_exec_mask_update(mask); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: fix nested cont statements
Module: Mesa Branch: master Commit: 6d2e09fdc23e2573e9466f60db20ef4ac04b367d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d2e09fdc23e2573e9466f60db20ef4ac04b367d Author: Zack Rusin Date: Thu Apr 22 13:45:25 2010 -0400 gallivm: fix nested cont statements --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index b87817d..e55e3dc 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -234,6 +234,7 @@ static void lp_exec_bgnloop(struct lp_exec_mask *mask) mask->cond_mask = LLVMConstAllOnes(mask->int_vec_type); mask->break_stack[mask->break_stack_size++] = mask->break_mask; + mask->cont_stack[mask->cont_stack_size++] = mask->cont_mask; mask->loop_stack[mask->loop_stack_size++] = mask->loop_block; mask->loop_block = lp_build_insert_new_block(mask->bld->builder, "bgnloop"); LLVMBuildBr(mask->bld->builder, mask->loop_block); @@ -264,7 +265,6 @@ static void lp_exec_continue(struct lp_exec_mask *mask) mask->exec_mask, ""); - mask->cont_stack[mask->cont_stack_size++] = mask->cont_mask; if (mask->cont_stack_size > 1) { mask->cont_mask = LLVMBuildAnd(mask->bld->builder, mask->cont_mask, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: update comments
Module: Mesa Branch: master Commit: 18a4a83ddab7655253fdb71d37393a32adcda488 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=18a4a83ddab7655253fdb71d37393a32adcda488 Author: Zack Rusin Date: Thu Apr 22 13:56:54 2010 -0400 gallivm: update comments --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 15 --- 1 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index e55e3dc..53a5ce0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -169,8 +169,7 @@ static void lp_exec_mask_init(struct lp_exec_mask *mask, struct lp_build_context static void lp_exec_mask_update(struct lp_exec_mask *mask) { if (mask->loop_stack_size) { - /*for loops we need to update the entire mask at - * runtime */ + /*for loops we need to update the entire mask at runtime */ LLVMValueRef tmp; assert(mask->break_mask); tmp = LLVMBuildAnd(mask->bld->builder, @@ -249,6 +248,10 @@ static void lp_exec_break(struct lp_exec_mask *mask) mask->exec_mask, "break"); + /* mask->break_stack_size > 1 implies that we encountered a break +* statemant already and if that's the case we want to make sure +* our mask is a combination of the previous break and the current +* execution mask */ if (mask->break_stack_size > 1) { mask->break_mask = LLVMBuildAnd(mask->bld->builder, mask->break_mask, @@ -300,10 +303,11 @@ static void lp_exec_endloop(struct lp_exec_mask *mask) LLVMPositionBuilderAtEnd(mask->bld->builder, endloop); mask->loop_block = mask->loop_stack[--mask->loop_stack_size]; - /* pop the break mask */ + /* pop the cont mask */ if (mask->cont_stack_size) { mask->cont_mask = mask->cont_stack[--mask->cont_stack_size]; } + /* pop the break mask */ if (mask->break_stack_size) { mask->break_mask = mask->break_stack[--mask->break_stack_size]; } @@ -311,6 +315,11 @@ static void lp_exec_endloop(struct lp_exec_mask *mask) lp_exec_mask_update(mask); } +/* stores val into an address pointed to by dst. + * mask->exec_mask is used to figure out which bits of val + * should be stored into the address + * (0 means don't store this bit, 1 means do store). + */ static void lp_exec_mask_store(struct lp_exec_mask *mask, LLVMValueRef val, LLVMValueRef dst) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: implement indirect addressing over constants
Module: Mesa Branch: master Commit: ded2374e67bdc2c24e868775d2ff77b39b339d56 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ded2374e67bdc2c24e868775d2ff77b39b339d56 Author: Zack Rusin Date: Thu Apr 22 17:31:55 2010 -0400 gallivm: implement indirect addressing over constants implement indirect addressing (ARL and ARR instructions) when used with CONST's. indirect addressing over other vars (temps, inputs, outputs) is not supported yet. --- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 50 -- 1 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 53a5ce0..72ed8c0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -125,6 +125,7 @@ struct lp_build_tgsi_soa_context LLVMValueRef immediates[LP_MAX_IMMEDIATES][NUM_CHANNELS]; LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS]; + LLVMValueRef addr[LP_MAX_TEMPS][NUM_CHANNELS]; struct lp_build_mask_context *mask; struct lp_exec_mask exec_mask; @@ -371,6 +372,7 @@ emit_fetch( const struct tgsi_full_src_register *reg = &inst->Src[index]; unsigned swizzle = tgsi_util_get_full_src_register_swizzle( reg, chan_index ); LLVMValueRef res; + LLVMValueRef addr; switch (swizzle) { case TGSI_SWIZZLE_X: @@ -378,11 +380,34 @@ emit_fetch( case TGSI_SWIZZLE_Z: case TGSI_SWIZZLE_W: + if (reg->Register.Indirect) { + LLVMTypeRef int_vec_type = lp_build_int_vec_type(bld->base.type); + unsigned swizzle = tgsi_util_get_src_register_swizzle( ®->Indirect, chan_index ); + addr = LLVMBuildLoad(bld->base.builder, + bld->addr[reg->Indirect.Index][swizzle], + ""); + /* for indexing we want integers */ + addr = LLVMBuildFPToSI(bld->base.builder, addr, +int_vec_type, ""); + addr = LLVMBuildExtractElement(bld->base.builder, +addr, LLVMConstInt(LLVMInt32Type(), 0, 0), +""); + } + switch (reg->Register.File) { case TGSI_FILE_CONSTANT: { LLVMValueRef index = LLVMConstInt(LLVMInt32Type(), reg->Register.Index*4 + swizzle, 0); - LLVMValueRef scalar_ptr = LLVMBuildGEP(bld->base.builder, bld->consts_ptr, &index, 1, ""); - LLVMValueRef scalar = LLVMBuildLoad(bld->base.builder, scalar_ptr, ""); + LLVMValueRef scalar, scalar_ptr; + + if (reg->Register.Indirect) { +/*lp_build_printf(bld->base.builder, + "\taddr = %d\n", addr);*/ +addr = lp_build_mul(&bld->base, addr, LLVMConstInt(LLVMInt32Type(), 4, 0)); +index = lp_build_add(&bld->base, index, addr); + } + scalar_ptr = LLVMBuildGEP(bld->base.builder, bld->consts_ptr, &index, 1, ""); + scalar = LLVMBuildLoad(bld->base.builder, scalar_ptr, ""); + res = lp_build_broadcast_scalar(&bld->base, scalar); break; } @@ -510,8 +535,8 @@ emit_store( break; case TGSI_FILE_ADDRESS: - /* FIXME */ - assert(0); + lp_exec_mask_store(&bld->exec_mask, value, + bld->addr[reg->Indirect.Index][chan_index]); break; case TGSI_FILE_PREDICATE: @@ -724,6 +749,11 @@ emit_declaration( bld->outputs[idx][i] = lp_build_alloca(&bld->base); break; + case TGSI_FILE_ADDRESS: + for (i = 0; i < NUM_CHANNELS; i++) +bld->addr[idx][i] = lp_build_alloca(&bld->base); + break; + default: /* don't need to declare other vars */ break; @@ -780,17 +810,13 @@ emit_instruction( } switch (inst->Instruction.Opcode) { -#if 0 case TGSI_OPCODE_ARL: - /* FIXME */ FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) { tmp0 = emit_fetch( bld, inst, 0, chan_index ); - emit_flr(bld, 0, 0); - emit_f2it( bld, 0 ); + tmp0 = lp_build_floor(&bld->base, tmp0); dst0[chan_index] = tmp0; } break; -#endif case TGSI_OPCODE_MOV: FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) { @@ -1360,17 +1386,13 @@ emit_instruction( return FALSE; break; -#if 0 case TGSI_OPCODE_ARR: - /* FIXME */ FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) { tmp0 = emit_fetch( bld, inst, 0, chan_index ); - emit_rnd( bld, 0, 0 ); - emit_f2it( bld, 0 ); + tmp0 = lp_build_round(&bld->base, tmp0); dst0[chan_index] = tmp0; } break; -#endif case TGSI_OPCODE_BRA: /* deprecated */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallivm: implement indirect addressing over temporaries
Module: Mesa Branch: master Commit: 021e0dc78b15fab29e761012860276c2597c8d8f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=021e0dc78b15fab29e761012860276c2597c8d8f Author: Zack Rusin Date: Thu Apr 22 18:36:07 2010 -0400 gallivm: implement indirect addressing over temporaries a bit more involved than indirect addressing over consts, but still fairly reasonable. we allocate an array instead of individual alloca's, and we do it only if the shader does indirect addressing. --- src/gallium/auxiliary/draw/draw_llvm.c |3 +- src/gallium/auxiliary/gallivm/lp_bld_tgsi.h |4 +- src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 105 +++ src/gallium/drivers/llvmpipe/lp_state_fs.c |2 +- 4 files changed, 74 insertions(+), 40 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 9d11031..5e8bef4 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -252,7 +252,8 @@ generate_vs(struct draw_llvm *llvm, NULL /*pos*/, inputs, outputs, - NULL/*sampler*/); + NULL/*sampler*/, + &llvm->draw->vs.vertex_shader->info); } #if DEBUG_STORE diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h index 63b938b..2eac5da 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi.h @@ -39,6 +39,7 @@ struct tgsi_token; +struct tgsi_shader_info; struct lp_type; struct lp_build_context; struct lp_build_mask_context; @@ -78,7 +79,8 @@ lp_build_tgsi_soa(LLVMBuilderRef builder, const LLVMValueRef *pos, const LLVMValueRef (*inputs)[4], LLVMValueRef (*outputs)[4], - struct lp_build_sampler_soa *sampler); + struct lp_build_sampler_soa *sampler, + struct tgsi_shader_info *info); #endif /* LP_BLD_TGSI_H */ diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 72ed8c0..df2e24c 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -46,6 +46,7 @@ #include "tgsi/tgsi_parse.h" #include "tgsi/tgsi_util.h" #include "tgsi/tgsi_exec.h" +#include "tgsi/tgsi_scan.h" #include "lp_bld_type.h" #include "lp_bld_const.h" #include "lp_bld_arit.h" @@ -127,6 +128,11 @@ struct lp_build_tgsi_soa_context LLVMValueRef temps[LP_MAX_TEMPS][NUM_CHANNELS]; LLVMValueRef addr[LP_MAX_TEMPS][NUM_CHANNELS]; + /* we allocate an array of temps if we have indirect +* addressing and then the temps above is unused */ + LLVMValueRef temps_array; + boolean has_indirect_addressing; + struct lp_build_mask_context *mask; struct lp_exec_mask exec_mask; }; @@ -358,6 +364,23 @@ emit_ddy(struct lp_build_tgsi_soa_context *bld, return lp_build_sub(&bld->base, src_top, src_bottom); } +static LLVMValueRef +get_temp_ptr(struct lp_build_tgsi_soa_context *bld, + unsigned index, + unsigned swizzle, + boolean is_indirect, + LLVMValueRef addr) +{ + if (!bld->has_indirect_addressing) { + return bld->temps[index][swizzle]; + } else { + LLVMValueRef lindex = + LLVMConstInt(LLVMInt32Type(), index*4 + swizzle, 0); + if (is_indirect) + lindex = lp_build_add(&bld->base, lindex, addr); + return LLVMBuildGEP(bld->base.builder, bld->temps_array, &lindex, 1, ""); + } +} /** * Register fetch. @@ -392,6 +415,7 @@ emit_fetch( addr = LLVMBuildExtractElement(bld->base.builder, addr, LLVMConstInt(LLVMInt32Type(), 0, 0), ""); + addr = lp_build_mul(&bld->base, addr, LLVMConstInt(LLVMInt32Type(), 4, 0)); } switch (reg->Register.File) { @@ -402,7 +426,6 @@ emit_fetch( if (reg->Register.Indirect) { /*lp_build_printf(bld->base.builder, "\taddr = %d\n", addr);*/ -addr = lp_build_mul(&bld->base, addr, LLVMConstInt(LLVMInt32Type(), 4, 0)); index = lp_build_add(&bld->base, index, addr); } scalar_ptr = LLVMBuildGEP(bld->base.builder, bld->consts_ptr, &index, 1, ""); @@ -422,11 +445,16 @@ emit_fetch( assert(res); break; - case TGSI_FILE_TEMPORARY: - res = LLVMBuildLoad(bld->base.builder, bld->temps[reg->Register.Index][swizzle], ""); + case TGSI_FILE_TEMPORARY: { + LLVMValueRef temp_ptr
Mesa (master): draw/llvm: implement fetch elts paths
Module: Mesa Branch: master Commit: 52f145a186b8e47439fb4a96d04a099d439477b7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=52f145a186b8e47439fb4a96d04a099d439477b7 Author: Zack Rusin Date: Mon Apr 26 13:51:47 2010 -0400 draw/llvm: implement fetch elts paths we were only running the llvm paths when the input elts were linear, now we can handle abritrary fetch elts arrays. we do this by generating two paths - linear and fetch_elts one and just selecting the right one at run time. --- src/gallium/auxiliary/draw/draw_llvm.c | 141 src/gallium/auxiliary/draw/draw_llvm.h | 12 ++ .../draw/draw_pt_fetch_shade_pipeline_llvm.c | 38 +- 3 files changed, 160 insertions(+), 31 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c index 703b46b..2738322 100644 --- a/src/gallium/auxiliary/draw/draw_llvm.c +++ b/src/gallium/auxiliary/draw/draw_llvm.c @@ -24,6 +24,8 @@ /* generates the draw jit function */ static void draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *var); +static void +draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *var); static void init_globals(struct draw_llvm *llvm) @@ -218,6 +220,7 @@ draw_llvm_prepare(struct draw_llvm *llvm, int num_inputs) llvm->vertex_header_ptr_type = create_vertex_header(llvm, num_inputs); draw_llvm_generate(llvm, variant); + draw_llvm_generate_elts(llvm, variant); return variant; } @@ -696,6 +699,144 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant) lp_disassemble(variant->jit_func); } + +static void +draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *variant) +{ + LLVMTypeRef arg_types[7]; + LLVMTypeRef func_type; + LLVMValueRef context_ptr; + LLVMBasicBlockRef block; + LLVMBuilderRef builder; + LLVMValueRef fetch_elts, fetch_count, stride, step, io_itr; + LLVMValueRef io_ptr, vbuffers_ptr, vb_ptr; + struct draw_context *draw = llvm->draw; + unsigned i, j; + struct lp_build_context bld; + struct lp_build_loop_state lp_loop; + struct lp_type vs_type = lp_type_float_vec(32); + const int max_vertices = 4; + LLVMValueRef outputs[PIPE_MAX_SHADER_OUTPUTS][NUM_CHANNELS]; + + arg_types[0] = llvm->context_ptr_type; /* context */ + arg_types[1] = llvm->vertex_header_ptr_type; /* vertex_header */ + arg_types[2] = llvm->buffer_ptr_type;/* vbuffers */ + arg_types[3] = LLVMPointerType(LLVMInt32Type(), 0); /* fetch_elts * */ + arg_types[4] = LLVMInt32Type(); /* fetch_count */ + arg_types[5] = LLVMInt32Type(); /* stride */ + arg_types[6] = llvm->vb_ptr_type;/* pipe_vertex_buffer's */ + + func_type = LLVMFunctionType(LLVMVoidType(), arg_types, Elements(arg_types), 0); + + variant->function_elts = LLVMAddFunction(llvm->module, "draw_llvm_shader_elts", func_type); + LLVMSetFunctionCallConv(variant->function_elts, LLVMCCallConv); + for(i = 0; i < Elements(arg_types); ++i) + if(LLVMGetTypeKind(arg_types[i]) == LLVMPointerTypeKind) + LLVMAddAttribute(LLVMGetParam(variant->function_elts, i), LLVMNoAliasAttribute); + + context_ptr = LLVMGetParam(variant->function_elts, 0); + io_ptr = LLVMGetParam(variant->function_elts, 1); + vbuffers_ptr = LLVMGetParam(variant->function_elts, 2); + fetch_elts = LLVMGetParam(variant->function_elts, 3); + fetch_count = LLVMGetParam(variant->function_elts, 4); + stride = LLVMGetParam(variant->function_elts, 5); + vb_ptr = LLVMGetParam(variant->function_elts, 6); + + lp_build_name(context_ptr, "context"); + lp_build_name(io_ptr, "io"); + lp_build_name(vbuffers_ptr, "vbuffers"); + lp_build_name(fetch_elts, "fetch_elts"); + lp_build_name(fetch_count, "fetch_count"); + lp_build_name(stride, "stride"); + lp_build_name(vb_ptr, "vb"); + + /* +* Function body +*/ + + block = LLVMAppendBasicBlock(variant->function_elts, "entry"); + builder = LLVMCreateBuilder(); + LLVMPositionBuilderAtEnd(builder, block); + + lp_build_context_init(&bld, builder, vs_type); + + step = LLVMConstInt(LLVMInt32Type(), max_vertices, 0); + + lp_build_loop_begin(builder, LLVMConstInt(LLVMInt32Type(), 0, 0), &lp_loop); + { + LLVMValueRef inputs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS]; + LLVMValueRef aos_attribs[PIPE_MAX_SHADER_INPUTS][NUM_CHANNELS] = { { 0 } }; + LLVMValueRef io; + const LLVMValueRef (*ptr_aos)[NUM_CHANNELS]; + + io_itr = lp_loop.counter; + io = LLVMBuildGEP(builder, io_ptr, &io_itr, 1, ""); +#if DEBUG_STORE + lp_build_printf(builder, " --- io %d = %p, loop counter
Mesa (gallium-mesa-7.4): egl: don't crash with one more khronos api
Module: Mesa Branch: gallium-mesa-7.4 Commit: f3b1c9bd94f3e289b75ec66dac39e913de586e06 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3b1c9bd94f3e289b75ec66dac39e913de586e06 Author: Zack Rusin Date: Fri Apr 17 07:05:24 2009 -0400 egl: don't crash with one more khronos api --- src/gallium/winsys/egl_xlib/egl_xlib.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c b/src/gallium/winsys/egl_xlib/egl_xlib.c index 872106d..83ceab0 100644 --- a/src/gallium/winsys/egl_xlib/egl_xlib.c +++ b/src/gallium/winsys/egl_xlib/egl_xlib.c @@ -386,6 +386,7 @@ xlib_eglDestroyContext(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx) /* API-dependent clean-up */ switch (context->Base.ClientAPI) { case EGL_OPENGL_ES_API: + case EGL_OPENVG_API: /* fall-through */ case EGL_OPENGL_API: st_destroy_context(context->Context); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl: don't crash with one more khronos api
Module: Mesa Branch: master Commit: ee2a5f307a026c1c258d3f7616d46cc7230d77ce URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee2a5f307a026c1c258d3f7616d46cc7230d77ce Author: Zack Rusin Date: Fri Apr 17 07:05:24 2009 -0400 egl: don't crash with one more khronos api --- src/gallium/winsys/egl_xlib/egl_xlib.c |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c b/src/gallium/winsys/egl_xlib/egl_xlib.c index 9ceb67d..68fe64a 100644 --- a/src/gallium/winsys/egl_xlib/egl_xlib.c +++ b/src/gallium/winsys/egl_xlib/egl_xlib.c @@ -388,6 +388,7 @@ xlib_eglDestroyContext(_EGLDriver *drv, EGLDisplay dpy, EGLContext ctx) /* API-dependent clean-up */ switch (context->Base.ClientAPI) { case EGL_OPENGL_ES_API: + case EGL_OPENVG_API: /* fall-through */ case EGL_OPENGL_API: st_destroy_context(context->Context); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): actually add debug to the debug config
Module: Mesa Branch: master Commit: fbceedd2dee967b426ee187205941c6506769ea5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fbceedd2dee967b426ee187205941c6506769ea5 Author: Zack Rusin Date: Fri May 1 12:50:38 2009 -0400 actually add debug to the debug config --- configs/linux-x86-64-debug |1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/configs/linux-x86-64-debug b/configs/linux-x86-64-debug index 46e72c9..6f631c0 100644 --- a/configs/linux-x86-64-debug +++ b/configs/linux-x86-64-debug @@ -4,4 +4,5 @@ include $(TOP)/configs/linux-x86-64 CONFIG_NAME = linux-x86-64-debug +OPT_FLAGS = -g DEFINES += -DDEBUG -DDEBUG_MATH ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl_xlib: Pass RTLD_LAZY to dlopen.
Module: Mesa Branch: master Commit: 293f576db7cf3f411c2eeb0a72232d25b631dcd1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=293f576db7cf3f411c2eeb0a72232d25b631dcd1 Author: José Fonseca Date: Tue Mar 24 19:18:06 2009 + egl_xlib: Pass RTLD_LAZY to dlopen. dlopen manpage mandates that either RTLD_LAZY or RTLD_NOW flags must be passed. Not doing so was causing a NULL return on debian unstable x86-64. --- src/gallium/winsys/egl_xlib/egl_xlib.c |4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/gallium/winsys/egl_xlib/egl_xlib.c b/src/gallium/winsys/egl_xlib/egl_xlib.c index b52f427..c10e3c0 100644 --- a/src/gallium/winsys/egl_xlib/egl_xlib.c +++ b/src/gallium/winsys/egl_xlib/egl_xlib.c @@ -588,7 +588,9 @@ find_supported_apis(void) EGLint mask = 0; void *handle; - handle = dlopen(NULL, 0); + handle = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL); + if(!handle) + return mask; if (dlsym(handle, "st_api_OpenGL_ES1")) mask |= EGL_OPENGL_ES_BIT; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (openvg-1.0): OpenVG 1.0 State Tracker
Module: Mesa Branch: openvg-1.0 Commit: 544dd4b11f7be76bb00fe29a60eaf2772dcc69ca URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=544dd4b11f7be76bb00fe29a60eaf2772dcc69ca Author: Zack Rusin Date: Fri May 1 12:41:38 2009 -0400 OpenVG 1.0 State Tracker Import of the OpenVG 1.0 state tracker for Gallium. --- docs/openvg.html| 48 + include/VG/openvg.h | 686 include/VG/vgext.h | 233 +++ include/VG/vgplatform.h | 106 ++ include/VG/vgu.h| 130 ++ progs/openvg/demos/Makefile | 40 + progs/openvg/demos/gears.c | 394 + progs/openvg/demos/lion-render.c| 1573 ++ progs/openvg/demos/lion-render.h| 16 + progs/openvg/demos/lion.c | 288 progs/openvg/demos/sp.c | 103 ++ progs/openvg/trivial/Makefile | 127 ++ progs/openvg/trivial/arc.c | 139 ++ progs/openvg/trivial/cap.c | 75 + progs/openvg/trivial/clear.c| 42 + progs/openvg/trivial/coord.c| 66 + progs/openvg/trivial/dash.c | 95 ++ progs/openvg/trivial/eglcommon.c| 288 progs/openvg/trivial/eglcommon.h| 20 + progs/openvg/trivial/ellipse.c | 84 + progs/openvg/trivial/filter.c | 107 ++ progs/openvg/trivial/gradorigin.c | 98 ++ progs/openvg/trivial/lineto.c | 56 + progs/openvg/trivial/lingrad.c | 87 + progs/openvg/trivial/lookup.c | 71 + progs/openvg/trivial/mask.c | 58 + progs/openvg/trivial/mask4.c| 132 ++ progs/openvg/trivial/path3.c| 77 + progs/openvg/trivial/radialgrad.c | 99 ++ progs/openvg/trivial/readpixels.c | 75 + progs/openvg/trivial/roundedrect.c | 67 + progs/openvg/trivial/star-nonzero.c | 55 + progs/openvg/trivial/star-oddeven.c | 102 ++ progs/openvg/trivial/stroke.c | 116 ++ progs/openvg/trivial/stroke2.c | 207 +++ progs/openvg/trivial/vguarc.c | 74 + src/gallium/state_trackers/vega/Makefile| 128 ++ src/gallium/state_trackers/vega/api_consts.h| 56 + src/gallium/state_trackers/vega/api_context.c | 75 + src/gallium/state_trackers/vega/api_filters.c | 805 + src/gallium/state_trackers/vega/api_images.c| 489 ++ src/gallium/state_trackers/vega/api_masks.c | 373 + src/gallium/state_trackers/vega/api_misc.c | 83 + src/gallium/state_trackers/vega/api_paint.c | 166 ++ src/gallium/state_trackers/vega/api_params.c| 1673 +++ src/gallium/state_trackers/vega/api_path.c | 488 ++ src/gallium/state_trackers/vega/api_text.c | 258 +++ src/gallium/state_trackers/vega/api_transform.c | 128 ++ src/gallium/state_trackers/vega/arc.c | 708 src/gallium/state_trackers/vega/arc.h | 80 + src/gallium/state_trackers/vega/asm_fill.h | 246 +++ src/gallium/state_trackers/vega/asm_filters.h | 117 ++ src/gallium/state_trackers/vega/asm_util.h | 136 ++ src/gallium/state_trackers/vega/bezier.c| 704 src/gallium/state_trackers/vega/bezier.h| 81 + src/gallium/state_trackers/vega/image.c | 654 src/gallium/state_trackers/vega/image.h | 104 ++ src/gallium/state_trackers/vega/mask.c | 690 src/gallium/state_trackers/vega/mask.h | 68 + src/gallium/state_trackers/vega/matrix.h| 462 + src/gallium/state_trackers/vega/paint.c | 699 src/gallium/state_trackers/vega/paint.h | 118 ++ src/gallium/state_trackers/vega/path.c | 2034 +++ src/gallium/state_trackers/vega/path.h | 126 ++ src/gallium/state_trackers/vega/path_utils.h| 109 ++ src/gallium/state_trackers/vega/polygon.c | 550 ++ src/gallium/state_trackers/vega/polygon.h | 75 + src/gallium/state_trackers/vega/renderer.c | 592 +++ src/gallium/state_trackers/vega/renderer.h | 76 + src/gallium/state_trackers/vega/shader.c| 310 src/gallium/state_trackers/vega/shader.h| 56 + src/gallium/state_trackers/vega/shaders_cache.c | 439 + src/gallium/state_trackers/vega/shaders_cache.h | 77 + src/gallium/state_trackers/vega/st_inlines.h| 159 ++ src/gallium/state_trackers/vega/stroker.c | 1349 +++ src/gallium/state_trackers/vega/stroker.h | 89 + src/gallium/state_trackers/vega/util_array.h| 122 ++ src
Mesa (openvg-1.0): vg: remove a silly demo and add a bit better one
Module: Mesa Branch: openvg-1.0 Commit: 54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04 Author: Zack Rusin Date: Fri May 1 19:08:32 2009 -0400 vg: remove a silly demo and add a bit better one --- progs/openvg/demos/Makefile | 19 +- progs/openvg/demos/{gears.c => eglcommon.c} | 236 -- progs/openvg/demos/eglcommon.h | 20 ++ progs/openvg/demos/sp.c | 466 ++- 4 files changed, 544 insertions(+), 197 deletions(-) diff --git a/progs/openvg/demos/Makefile b/progs/openvg/demos/Makefile index 7ecb987..6e15342 100644 --- a/progs/openvg/demos/Makefile +++ b/progs/openvg/demos/Makefile @@ -7,8 +7,8 @@ VG_LIBS=-lm -pthread -lEGL -lOpenVG INCLUDE_DIRS = -I$(TOP)/include PROGRAMS = \ - gears \ -lion +lion \ +sp .c.o: $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@ @@ -17,14 +17,6 @@ PROGRAMS = \ default: $(PROGRAMS) - -gears: gears.o - $(CC) $(CFLAGS) gears.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o $@ - -gears.o: gears.c $(HEADERS) - $(CC) -c $(CFLAGS) -I$(TOP)/include gears.c - - lion: lion.o lion-render.o $(CC) $(CFLAGS) lion.o lion-render.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o $@ @@ -34,6 +26,13 @@ lion-render.o: lion-render.c lion-render.h $(HEADERS) $(CC) -c $(CFLAGS) -I$(TOP)/include lion-render.c +sp: sp.c eglcommon.o + $(CC) $(INCLUDE_DIRS) $(CFLAGS) $^ -L$(TOP)/$(LIB_DIR) $(LIBS) $(VG_LIBS) $(APP_LIB_DEPS) -o $@ + +eglcommon.o: eglcommon.c $(HEADERS) + $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) eglcommon.c + + clean: rm -f *.o *~ rm -f *.so diff --git a/progs/openvg/demos/gears.c b/progs/openvg/demos/eglcommon.c similarity index 56% rename from progs/openvg/demos/gears.c rename to progs/openvg/demos/eglcommon.c index 7dcb395..bacd568 100644 --- a/progs/openvg/demos/gears.c +++ b/progs/openvg/demos/eglcommon.c @@ -1,3 +1,6 @@ +#include "eglcommon.h" + + #include #include #include @@ -6,157 +9,23 @@ #include #include #include -#include +#include /* using full OpenGL for now */ #include -static VGint width, height; -static VGPath gear1; -static VGPath gear2; -static VGPath gear3; - -static VGPaint fill; -const VGfloat color[4] = {0.5, 0.5, 0.5, 1.0}; - -static VGfloat gear1_angle = 35; -static VGfloat gear2_angle = 24; -static VGfloat gear3_angle = 33.5; - -static void moveTo(VGPath path, VGfloat x, VGfloat y) -{ - static VGubyte moveTo = VG_MOVE_TO | VG_ABSOLUTE; - VGfloat pathData[2]; - pathData[0] = x; pathData[1] = y; - vgAppendPathData(path, 1, &moveTo, pathData); -} - -static void lineTo(VGPath path, VGfloat x, VGfloat y) -{ - static VGubyte lineTo = VG_LINE_TO | VG_ABSOLUTE; - VGfloat pathData[2]; - pathData[0] = x; pathData[1] = y; - vgAppendPathData(path, 1, &lineTo, pathData); -} - -static void closeSubpath(VGPath path) -{ - static VGubyte close = VG_CLOSE_PATH | VG_ABSOLUTE; - VGfloat pathData[2]; - vgAppendPathData(path, 1, &close, pathData); -} - -static void cubicTo(VGPath path, VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, - VGfloat midx, VGfloat midy) -{ - static VGubyte cubic = VG_CUBIC_TO | VG_ABSOLUTE; - VGfloat pathData[6]; - pathData[0] = x1; - pathData[1] = y1; - pathData[2] = x2; - pathData[3] = y2; - pathData[4] = midx; - pathData[5] = midy; - vgAppendPathData(path, 1, &cubic, pathData); -} - -static VGPath gearsPath(double inner_radius, double outer_radius, -int teeth, double tooth_depth) -{ - VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, - 0, 0, (unsigned int)VG_PATH_CAPABILITY_ALL); - - int i; - double r0, r1, r2; - double angle, da; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0; - r2 = outer_radius + tooth_depth / 2.0; - - da = 2.0 * M_PI / (VGfloat) teeth / 4.0; - angle = 0.0; - moveTo(path, r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da)); - - for (i = 1; i <= teeth; i++) { - angle = i * 2.0 * M_PI / (VGfloat)teeth; - - lineTo(path, r1 * cos(angle), r1 * sin(angle)); - lineTo(path, r2 * cos(angle + da), r2 * sin(angle + da)); - lineTo(path, r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da)); - - if (i < teeth) - lineTo(path, r1 * cos(angle + 3 * da), -r1 * sin(angle + 3 * da)); - } +static init_funcinit = 0; +static draw_funcdraw = 0; +static reshape_func reshape = 0; +static key_func keyPress = 0; +static VGint width = 300, height = 300; - closeSubpath(path); - moveTo(path, r0 * cos(angle + 3 * da), r0 * sin(angle + 3 * da)); - - for (i = 1; i <= teeth; i++) { - angle = i * 2.0 * M_PI / (VGfloat) teeth; - - lineTo(path, r0 * cos(angle), r0 * s
Mesa (arb_geometry_shader4): gs: recognize "varying in|out" language
Module: Mesa Branch: arb_geometry_shader4 Commit: baf438c8a5c0927024777956edf807ae3bd6232c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=baf438c8a5c0927024777956edf807ae3bd6232c Author: Zack Rusin Date: Mon May 18 21:07:25 2009 -0400 gs: recognize "varying in|out" language --- src/mesa/shader/slang/library/slang_shader.syn |5 + src/mesa/shader/slang/library/slang_shader_syn.h |3 +++ src/mesa/shader/slang/slang_compile.c|2 ++ src/mesa/state_tracker/st_program.c |2 +- 4 files changed, 11 insertions(+), 1 deletions(-) diff --git a/src/mesa/shader/slang/library/slang_shader.syn b/src/mesa/shader/slang/library/slang_shader.syn index f3fd1f8..66e2fd9 100644 --- a/src/mesa/shader/slang/library/slang_shader.syn +++ b/src/mesa/shader/slang/library/slang_shader.syn @@ -137,6 +137,7 @@ .emtcode TYPE_QUALIFIER_UNIFORM 4 .emtcode TYPE_QUALIFIER_FIXEDOUTPUT 5 .emtcode TYPE_QUALIFIER_FIXEDINPUT 6 +.emtcode TYPE_QUALIFIER_VARYING_IN 7 /* invariant qualifier */ .emtcode TYPE_VARIANT 90 @@ -957,6 +958,8 @@ centroid_qualifier * ::= "const" *| "attribute" // Vertex only. *| "varying" + *| "varying out" + *| "varying in" *| "uniform" *| "__fixed_output" *| "__fixed_input" @@ -968,6 +971,8 @@ type_qualifier "const" .emit TYPE_QUALIFIER_CONST .or .if (shader_type == 2) "attribute" .emit TYPE_QUALIFIER_ATTRIBUTE .or "varying" .emit TYPE_QUALIFIER_VARYING .or +"varying out" .emit TYPE_QUALIFIER_VARYING .or +"varying in" .emit TYPE_QUALIFIER_VARYING_IN .or "uniform" .emit TYPE_QUALIFIER_UNIFORM .or .if (parsing_builtin != 0) "__fixed_output" .emit TYPE_QUALIFIER_FIXEDOUTPUT .or .if (parsing_builtin != 0) "__fixed_input" .emit TYPE_QUALIFIER_FIXEDINPUT; diff --git a/src/mesa/shader/slang/library/slang_shader_syn.h b/src/mesa/shader/slang/library/slang_shader_syn.h index 9312270..8c0884f 100644 --- a/src/mesa/shader/slang/library/slang_shader_syn.h +++ b/src/mesa/shader/slang/library/slang_shader_syn.h @@ -49,6 +49,7 @@ ".emtcode TYPE_QUALIFIER_UNIFORM 4\n" ".emtcode TYPE_QUALIFIER_FIXEDOUTPUT 5\n" ".emtcode TYPE_QUALIFIER_FIXEDINPUT 6\n" +".emtcode TYPE_QUALIFIER_VARYING_IN 7\n" ".emtcode TYPE_VARIANT 90\n" ".emtcode TYPE_INVARIANT 91\n" ".emtcode TYPE_CENTER 95\n" @@ -468,6 +469,8 @@ " \"const\" .emit TYPE_QUALIFIER_CONST .or\n" " .if (shader_type == 2) \"attribute\" .emit TYPE_QUALIFIER_ATTRIBUTE .or\n" " \"varying\" .emit TYPE_QUALIFIER_VARYING .or\n" +" \"varying out\" .emit TYPE_QUALIFIER_VARYING .or\n" +" \"varying in\" .emit TYPE_QUALIFIER_VARYING_IN .or\n" " \"uniform\" .emit TYPE_QUALIFIER_UNIFORM .or\n" " .if (parsing_builtin != 0) \"__fixed_output\" .emit TYPE_QUALIFIER_FIXEDOUTPUT .or\n" " .if (parsing_builtin != 0) \"__fixed_input\" .emit TYPE_QUALIFIER_FIXEDINPUT;\n" diff --git a/src/mesa/shader/slang/slang_compile.c b/src/mesa/shader/slang/slang_compile.c index ebb5f5b..5512b95 100644 --- a/src/mesa/shader/slang/slang_compile.c +++ b/src/mesa/shader/slang/slang_compile.c @@ -562,6 +562,7 @@ parse_type_centroid(slang_parse_ctx * C, slang_type_centroid *centroid) #define TYPE_QUALIFIER_UNIFORM 4 #define TYPE_QUALIFIER_FIXEDOUTPUT 5 #define TYPE_QUALIFIER_FIXEDINPUT 6 +#define TYPE_QUALIFIER_VARYING_IN 7 static int parse_type_qualifier(slang_parse_ctx * C, slang_type_qualifier * qual) @@ -578,6 +579,7 @@ parse_type_qualifier(slang_parse_ctx * C, slang_type_qualifier * qual) *qual = SLANG_QUAL_ATTRIBUTE; break; case TYPE_QUALIFIER_VARYING: + case TYPE_QUALIFIER_VARYING_IN: *qual = SLANG_QUAL_VARYING; break; case TYPE_QUALIFIER_UNIFORM: diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index d451c26..082a6e9 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -649,7 +649,7 @@ st_translate_geometry_program(struct st_context *st, * Determine number of outputs, the (default) output register * mapping and the semantic information for each output. */ - for (attr = 0; attr < VERT_RESULT_MAX; attr++) { + for (attr = 0; attr < GEOM_RESULT_MAX; attr++) { if (stgp->Base.Base.OutputsWritten & (1 << attr)) { GLuint slot; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: better way of handling varying in/out
Module: Mesa Branch: arb_geometry_shader4 Commit: 95863e570e8b675efbdf58a7524f5a92b4a3d9e8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=95863e570e8b675efbdf58a7524f5a92b4a3d9e8 Author: Zack Rusin Date: Tue May 19 00:13:15 2009 -0400 gs: better way of handling varying in/out --- src/mesa/shader/slang/library/slang_120_core_gc.h | 1449 +- .../slang/library/slang_builtin_120_common_gc.h| 201 ++-- .../slang/library/slang_builtin_120_fragment_gc.h |2 +- .../shader/slang/library/slang_common_builtin_gc.h | 1692 ++-- src/mesa/shader/slang/library/slang_core_gc.h | 1689 ++-- .../slang/library/slang_fragment_builtin_gc.h | 209 ++-- .../shader/slang/library/slang_geometry_builtin.gc | 34 +- src/mesa/shader/slang/library/slang_shader.syn | 16 +- src/mesa/shader/slang/library/slang_shader_syn.h | 10 +- .../shader/slang/library/slang_vertex_builtin_gc.h | 207 ++-- src/mesa/shader/slang/slang_compile.c | 49 +- src/mesa/shader/slang/slang_typeinfo.c |1 + src/mesa/shader/slang/slang_typeinfo.h |7 + 13 files changed, 2814 insertions(+), 2752 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=95863e570e8b675efbdf58a7524f5a92b4a3d9e8 ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: better builtin setup
Module: Mesa Branch: arb_geometry_shader4 Commit: c714fd50d978c203c6977457a0ee270054f69a1e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c714fd50d978c203c6977457a0ee270054f69a1e Author: Zack Rusin Date: Tue May 19 13:30:10 2009 -0400 gs: better builtin setup --- .../shader/slang/library/slang_geometry_builtin.gc |8 +++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/src/mesa/shader/slang/library/slang_geometry_builtin.gc b/src/mesa/shader/slang/library/slang_geometry_builtin.gc index b2dc185..3f1adba 100644 --- a/src/mesa/shader/slang/library/slang_geometry_builtin.gc +++ b/src/mesa/shader/slang/library/slang_geometry_builtin.gc @@ -22,6 +22,12 @@ const int _mesa_VerticesInMax = 6; +__fixed_input int gl_VerticesIn; +__fixed_input int gl_PrimitiveIDIn; +__fixed_output int gl_PrimitiveID; +__fixed_output int gl_Layer; + + varying in vec4 gl_FrontColorIn[_mesa_VerticesInMax]; varying in vec4 gl_BackColorIn[_mesa_VerticesInMax]; varying in vec4 gl_FrontSecondaryColorIn[_mesa_VerticesInMax]; @@ -37,7 +43,7 @@ varying out vec4 gl_FrontColor; varying out vec4 gl_BackColor; varying out vec4 gl_FrontSecondaryColor; varying out vec4 gl_BackSecondaryColor; -varying out vec4 gl_TexCoord[_mesa_VerticesInMax]; +varying out vec4 gl_TexCoord[gl_MaxTextureCoords]; varying out float gl_FogFragCoord; void EmitVertex() ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: fixed input also for geometry shaders
Module: Mesa Branch: arb_geometry_shader4 Commit: 366224a3441ef9924aaa48b28ed71875e6936e46 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=366224a3441ef9924aaa48b28ed71875e6936e46 Author: Zack Rusin Date: Tue May 19 14:37:57 2009 -0400 gs: fixed input also for geometry shaders --- src/mesa/shader/slang/slang_codegen.c | 12 +--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 41f5878..b03d5dc 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -4565,9 +4565,15 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, } else if (var->type.qualifier == SLANG_QUAL_FIXEDINPUT) { GLuint swizzle = SWIZZLE_XYZW; /* silence compiler warning */ - GLint index = _slang_input_index(varName, GL_FRAGMENT_PROGRAM_ARB, - &swizzle); - store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); + if (type == SLANG_UNIT_FRAGMENT_BUILTIN) { + GLint index = _slang_input_index(varName, GL_FRAGMENT_PROGRAM_ARB, + &swizzle); + store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); + } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) { + GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM, + &swizzle); + store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); + } if (dbg) printf("INPUT "); } else if (var->type.qualifier == SLANG_QUAL_FIXEDOUTPUT) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: handle gl_VerticesIn and gl_PrimitiveIDIn specially
Module: Mesa Branch: arb_geometry_shader4 Commit: f9328aaf5abd1b8d4458426cd02d252a6d36fcbc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f9328aaf5abd1b8d4458426cd02d252a6d36fcbc Author: Zack Rusin Date: Tue May 19 21:59:13 2009 -0400 gs: handle gl_VerticesIn and gl_PrimitiveIDIn specially --- src/mesa/shader/slang/slang_codegen.c | 11 ++- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index b03d5dc..7c02dfc 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -359,7 +359,6 @@ _slang_input_index(const char *name, GLenum target, GLuint *swizzleOut) { NULL, 0, SWIZZLE_NOOP } }; static const struct input_info geoInputs[] = { - { "gl_VerticesIn", GEOM_ATTRIB_VERTICES, SWIZZLE_NOOP }, { "gl_FrontColorIn", GEOM_ATTRIB_COLOR0, SWIZZLE_NOOP }, { "gl_BackColorIn", GEOM_ATTRIB_COLOR1, SWIZZLE_NOOP }, { "gl_FrontSecondaryColorIn", GEOM_ATTRIB_SECONDARY_COLOR0, SWIZZLE_NOOP }, @@ -369,7 +368,6 @@ _slang_input_index(const char *name, GLenum target, GLuint *swizzleOut) { "gl_PositionIn", GEOM_ATTRIB_POSITION, SWIZZLE_NOOP }, { "gl_ClipVertexIn", GEOM_ATTRIB_CLIP_VERTEX, SWIZZLE_NOOP }, { "gl_PointSizeIn", GEOM_ATTRIB_POINT_SIZE, SWIZZLE_NOOP }, - { "gl_PrimitiveIDIn", GEOM_ATTRIB_PRIMITIVE_ID, SWIZZLE_NOOP }, { NULL, 0, SWIZZLE_NOOP } }; static const struct input_info fragInputs[] = { @@ -4570,9 +4568,12 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, &swizzle); store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) { - GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM, - &swizzle); - store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); + const GLfloat value = 0; + GLint index; + + index = _mesa_add_named_constant(prog->Parameters, varName, + &value, size); + store = _slang_new_ir_storage_swz(PROGRAM_CONSTANT, index, size, swizzle); } if (dbg) printf("INPUT "); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: treat those two special inputs more like other varyings
Module: Mesa Branch: arb_geometry_shader4 Commit: 0b2761402ed70af6f82bc2b0485db895f19ab430 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0b2761402ed70af6f82bc2b0485db895f19ab430 Author: Zack Rusin Date: Tue May 19 23:36:17 2009 -0400 gs: treat those two special inputs more like other varyings --- src/mesa/shader/slang/slang_codegen.c | 11 +-- 1 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 7c02dfc..f4785a9 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -359,6 +359,8 @@ _slang_input_index(const char *name, GLenum target, GLuint *swizzleOut) { NULL, 0, SWIZZLE_NOOP } }; static const struct input_info geoInputs[] = { + { "gl_VerticesIn", GEOM_ATTRIB_VERTICES, SWIZZLE_NOOP }, + { "gl_PrimitiveIDIn", GEOM_ATTRIB_PRIMITIVE_ID, SWIZZLE_NOOP }, { "gl_FrontColorIn", GEOM_ATTRIB_COLOR0, SWIZZLE_NOOP }, { "gl_BackColorIn", GEOM_ATTRIB_COLOR1, SWIZZLE_NOOP }, { "gl_FrontSecondaryColorIn", GEOM_ATTRIB_SECONDARY_COLOR0, SWIZZLE_NOOP }, @@ -4568,12 +4570,9 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var, &swizzle); store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); } else if (type == SLANG_UNIT_GEOMETRY_BUILTIN) { - const GLfloat value = 0; - GLint index; - - index = _mesa_add_named_constant(prog->Parameters, varName, - &value, size); - store = _slang_new_ir_storage_swz(PROGRAM_CONSTANT, index, size, swizzle); + GLint index = _slang_input_index(varName, MESA_GEOMETRY_PROGRAM, + &swizzle); + store = _slang_new_ir_storage_swz(PROGRAM_INPUT, index, size, swizzle); } if (dbg) printf("INPUT "); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: actually translate a geometry program
Module: Mesa Branch: arb_geometry_shader4 Commit: d3685a42e9511efde5ef9759fb8d493656601a2d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3685a42e9511efde5ef9759fb8d493656601a2d Author: Zack Rusin Date: Tue May 19 23:35:50 2009 -0400 gs: actually translate a geometry program plus enable debugging output for now --- src/mesa/state_tracker/st_program.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 082a6e9..88311f6 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -52,7 +52,7 @@ #define ST_MAX_SHADER_TOKENS 4096 -#define TGSI_DEBUG 0 +#define TGSI_DEBUG 1 /** XXX we should use the version of this from u_memory.h but including @@ -731,7 +731,7 @@ st_translate_geometry_program(struct st_context *st, /* XXX: fix static allocation of tokens: */ num_tokens = st_translate_mesa_program(st->ctx, - TGSI_PROCESSOR_VERTEX, + TGSI_PROCESSOR_GEOMETRY, &stgp->Base.Base, /* inputs */ gs_num_inputs, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: make tgsi translation code treat geometry progs a lot like vertex progs
Module: Mesa Branch: arb_geometry_shader4 Commit: 2d487cabf7188fd9a93e067f64875a5440ee2a6b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2d487cabf7188fd9a93e067f64875a5440ee2a6b Author: Zack Rusin Date: Wed May 20 00:19:58 2009 -0400 gs: make tgsi translation code treat geometry progs a lot like vertex progs --- src/mesa/state_tracker/st_mesa_to_tgsi.c |7 --- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 3d7cf62..b5d12c6 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -905,7 +905,8 @@ st_translate_mesa_program( GLint wposTemp = -1, winHeightConst = -1; assert(procType == TGSI_PROCESSOR_FRAGMENT || - procType == TGSI_PROCESSOR_VERTEX); + procType == TGSI_PROCESSOR_VERTEX || + procType == TGSI_PROCESSOR_GEOMETRY); find_temporaries(program, tempsUsed); @@ -953,7 +954,7 @@ st_translate_mesa_program( } } else { - /* vertex prog */ + /* vertex/geometry prog */ /* XXX: this could probaby be merged with the clause above. * the only difference is the semantic tags. */ @@ -1003,7 +1004,7 @@ st_translate_mesa_program( } } else { - /* vertex prog */ + /* vertex/geometry prog */ for (i = 0; i < numOutputs; i++) { struct tgsi_full_declaration fulldecl; fulldecl = make_output_decl(i, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: add the relevant state to the geometry shader token
Module: Mesa Branch: arb_geometry_shader4 Commit: 96a4de1db7f83ed0e4b86e8d8d70fa84a20b0609 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=96a4de1db7f83ed0e4b86e8d8d70fa84a20b0609 Author: Zack Rusin Date: Wed May 20 17:16:35 2009 -0400 gs: add the relevant state to the geometry shader token it looks that to compile it we'll actually need to piggy back the state that was set at link time. otherwise there's not enough informations to bind it --- src/gallium/include/pipe/p_context.h|2 +- src/gallium/include/pipe/p_defines.h| 24 +--- src/gallium/include/pipe/p_state.h |7 +++ src/mesa/shader/slang/slang_link.c | 11 +++ src/mesa/state_tracker/st_atom_shader.c |2 +- src/mesa/state_tracker/st_cb_program.c | 12 ++-- src/mesa/state_tracker/st_program.c | 17 ++--- src/mesa/state_tracker/st_program.h |2 +- 8 files changed, 50 insertions(+), 27 deletions(-) diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index 4ee0807..4576999 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -147,7 +147,7 @@ struct pipe_context { void (*delete_vs_state)(struct pipe_context *, void *); void * (*create_gs_state)(struct pipe_context *, - const struct pipe_shader_state *); + const struct pipe_geometry_shader_state *); void (*bind_gs_state)(struct pipe_context *, void *); void (*delete_gs_state)(struct pipe_context *, void *); diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index f5ab83a..8881bec 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -243,17 +243,19 @@ enum pipe_transfer_usage { /** * Primitive types: */ -#define PIPE_PRIM_POINTS 0 -#define PIPE_PRIM_LINES 1 -#define PIPE_PRIM_LINE_LOOP 2 -#define PIPE_PRIM_LINE_STRIP 3 -#define PIPE_PRIM_TRIANGLES 4 -#define PIPE_PRIM_TRIANGLE_STRIP 5 -#define PIPE_PRIM_TRIANGLE_FAN6 -#define PIPE_PRIM_QUADS 7 -#define PIPE_PRIM_QUAD_STRIP 8 -#define PIPE_PRIM_POLYGON 9 -#define PIPE_PRIM_MAX 10 +#define PIPE_PRIM_POINTS 0 +#define PIPE_PRIM_LINES1 +#define PIPE_PRIM_LINE_LOOP2 +#define PIPE_PRIM_LINE_STRIP 3 +#define PIPE_PRIM_TRIANGLES4 +#define PIPE_PRIM_TRIANGLE_STRIP 5 +#define PIPE_PRIM_TRIANGLE_FAN 6 +#define PIPE_PRIM_QUADS7 +#define PIPE_PRIM_QUAD_STRIP 8 +#define PIPE_PRIM_POLYGON 9 +#define PIPE_PRIM_LINES_ADJACENCY 10 +#define PIPE_PRIM_TRIANGLES_ADJACENCY 11 +#define PIPE_PRIM_MAX 12 /** diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 4b590bd..602042c 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -172,6 +172,13 @@ struct pipe_shader_state { const struct tgsi_token *tokens; }; +struct pipe_geometry_shader_state +{ + struct pipe_shader_state shader; + unsigned vertices_out : 16; + unsigned input_type : 8; + unsigned output_type : 8; +}; struct pipe_depth_state diff --git a/src/mesa/shader/slang/slang_link.c b/src/mesa/shader/slang/slang_link.c index 624cbba..590e0e2 100644 --- a/src/mesa/shader/slang/slang_link.c +++ b/src/mesa/shader/slang/slang_link.c @@ -814,6 +814,17 @@ _slang_link(GLcontext *ctx, } } if (shProg->GeometryProgram) { + if (!shProg->VertexProgram) { + link_error(shProg, +"Geometry shader without a vertex shader is illegal!\n"); + return; + } + if (shProg->GeometryProgram->VerticesOut == 0) { + link_error(shProg, +"GEOMETRY_VERTICES_OUT is zero\n"); + return; + } + _slang_count_temporaries(&shProg->GeometryProgram->Base); _slang_update_inputs_outputs(&shProg->GeometryProgram->Base); } diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index 173566b..ae9caf1 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -154,7 +154,7 @@ find_translated_vp(struct st_context *st, st_translate_fragment_program(st, stfp, stfp->input_to_slot); } - if (!stgp->state.tokens) { + if (!stgp->state.shader.tokens) { GLuint inAttr, numIn = 0; for (inAttr = 0; inAttr < GEOM_ATTRIB_MAX; inAttr++) { diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c index 5fb9ada..b71894d 100644 --- a/src/mesa/state_tracker/st_cb_program.c +++ b/src/mesa/state_tracker/st_cb_program.c @@ -201,9 +201,9 @@ st_delete_program(GLcont
Mesa (arb_geometry_shader4): tgsi: add a aos execution engine
Module: Mesa Branch: arb_geometry_shader4 Commit: 3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1 Author: Zack Rusin Date: Tue May 26 14:07:32 2009 -0400 tgsi: add a aos execution engine a simple port of the current soa code, so quite inneficient --- src/gallium/auxiliary/tgsi/Makefile|3 +- src/gallium/auxiliary/tgsi/tgsi_exec_aos.c | 2819 src/gallium/auxiliary/tgsi/tgsi_exec_aos.h | 169 ++ 3 files changed, 2990 insertions(+), 1 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=3c9a6c6e73c9f2fbf1d5995751a25706d0cf3bf1 ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: fixup paths for programparameteri
Module: Mesa Branch: arb_geometry_shader4 Commit: 9f3199e2939e11c931c336bb5ec1af067ec2aff8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9f3199e2939e11c931c336bb5ec1af067ec2aff8 Author: Zack Rusin Date: Fri May 29 12:41:17 2009 -0400 gs: fixup paths for programparameteri --- src/mesa/main/dd.h |2 + src/mesa/main/shaders.c| 56 +-- src/mesa/shader/shader_api.c | 60 .../shader/slang/library/slang_geometry_builtin.gc |2 +- 4 files changed, 65 insertions(+), 55 deletions(-) diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 32b1d4e..5ff2fb9 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -915,6 +915,8 @@ struct dd_function_table { GLboolean transpose, const GLfloat *values); void (*UseProgram)(GLcontext *ctx, GLuint program); void (*ValidateProgram)(GLcontext *ctx, GLuint program); + void (*ProgramParameteri)(GLcontext *ctx, GLuint program, + GLenum pname, GLint value); /* XXX many more to come */ /*...@}*/ diff --git a/src/mesa/main/shaders.c b/src/mesa/main/shaders.c index 31caede..d6bf8ae 100644 --- a/src/mesa/main/shaders.c +++ b/src/mesa/main/shaders.c @@ -728,61 +728,9 @@ _mesa_ValidateProgramARB(GLhandleARB program) ctx->Driver.ValidateProgram(ctx, program); } -static struct gl_geometry_program *_mesa_geometryFromShader(GLuint program) -{ - GET_CURRENT_CONTEXT(ctx); - struct gl_shader_program *shProg = NULL; - struct gl_shader *sh = NULL; - GLuint i; - - shProg = _mesa_lookup_shader_program(ctx, program); - - if (!ctx->Extensions.ARB_geometry_shader4) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glProgramParameteriARB"); - return NULL; - } - - if (!shProg) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB"); - return NULL; - } - for (i = 0; i < shProg->NumShaders; ++i) { - if (shProg->Shaders[i]->Type == GL_GEOMETRY_SHADER_ARB) { - sh = shProg->Shaders[i]; - } - } - if (!sh || !sh->Program) { - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB"); - return NULL; - } - return (struct gl_geometry_program *) sh->Program; -} - void GLAPIENTRY _mesa_ProgramParameteriARB(GLuint program, GLenum pname, GLint value) { - struct gl_geometry_program *gprog; - GET_CURRENT_CONTEXT(ctx); - ASSERT_OUTSIDE_BEGIN_END(ctx); - - switch (pname) { - case GL_GEOMETRY_VERTICES_OUT_ARB: - gprog = _mesa_geometryFromShader(program); - if (gprog) - gprog->VerticesOut = value; - break; - case GL_GEOMETRY_INPUT_TYPE_ARB: - gprog = _mesa_geometryFromShader(program); - if (gprog) - gprog->InputType = value; - break; - case GL_GEOMETRY_OUTPUT_TYPE_ARB: - gprog = _mesa_geometryFromShader(program); - if (gprog) - gprog->OutputType = value; - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB"); - break; - } + GET_CURRENT_CONTEXT(ctx); + ctx->Driver.ProgramParameteri(ctx, program, pname, value); } diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index 0ac40d0..a121a72 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1068,6 +1068,65 @@ _mesa_get_programiv(GLcontext *ctx, GLuint program, } } +static struct gl_geometry_program * +_mesa_geometry_from_shader(GLuint program) +{ + GET_CURRENT_CONTEXT(ctx); + struct gl_shader_program *shProg = NULL; + struct gl_shader *sh = NULL; + GLuint i; + + shProg = _mesa_lookup_shader_program(ctx, program); + + if (!ctx->Extensions.ARB_geometry_shader4) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glProgramParameteriARB"); + return NULL; + } + + if (!shProg) { + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB"); + return NULL; + } + for (i = 0; i < shProg->NumShaders; ++i) { + if (shProg->Shaders[i]->Type == GL_GEOMETRY_SHADER_ARB) { + sh = shProg->Shaders[i]; + } + } + if (!sh || !sh->Program) { + _mesa_error(ctx, GL_INVALID_ENUM, "glProgramParameteriARB"); + return NULL; + } + return (struct gl_geometry_program *) sh->Program; +} + +static void +_mesa_program_parameteri(GLcontext *ctx, GLuint program, + GLenum pname, GLint value) +{ + struct gl_geometry_program *gprog; + ASSERT_OUTSIDE_BEGIN_END(ctx); + + switch (pname) { + case GL_GEOMETRY_VERTICES_OUT_ARB: + gprog = _mesa_geometryFromShader(program); + if (gprog) + gprog->VerticesOut = value; + break; + case GL_GEOMETRY_INPUT_TYPE_ARB: + gprog = _mesa_geometryFromShader(program); + if (gprog) + gprog->InputType = val
Mesa (arb_geometry_shader4): gs: fix typos
Module: Mesa Branch: arb_geometry_shader4 Commit: 306be014ab9c086c11bb2f49f1d6eb102569f103 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=306be014ab9c086c11bb2f49f1d6eb102569f103 Author: Zack Rusin Date: Wed May 20 18:18:20 2009 -0400 gs: fix typos --- src/mesa/state_tracker/st_program.c |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 54fc691..6603f6f 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -702,7 +702,7 @@ st_translate_geometry_program(struct st_context *st, case GEOM_RESULT_TEX6: case GEOM_RESULT_TEX7: /* fall-through */ - case VERT_RESULT_VAR0: + case GEOM_RESULT_VAR0: /* fall-through */ default: /* use default semantic info */ @@ -724,7 +724,7 @@ st_translate_geometry_program(struct st_context *st, stgp->state.shader.tokens = NULL; } if (stgp->driver_shader) { - cso_delete_vertex_shader(st->cso_context, stgp->driver_shader); + cso_delete_geometry_shader(st->cso_context, stgp->driver_shader); stgp->driver_shader = NULL; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: use pipe_geometry_shader_state
Module: Mesa Branch: arb_geometry_shader4 Commit: 8b7c63848a74d0fd615016a778918ec03b577570 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8b7c63848a74d0fd615016a778918ec03b577570 Author: Zack Rusin Date: Fri May 22 13:38:07 2009 -0400 gs: use pipe_geometry_shader_state --- src/gallium/auxiliary/draw/draw_context.h |2 +- src/gallium/auxiliary/draw/draw_gs.c |2 +- src/gallium/drivers/softpipe/sp_state.h|4 ++-- src/gallium/drivers/softpipe/sp_state_fs.c |8 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_context.h b/src/gallium/auxiliary/draw/draw_context.h index ed72139..d236cf2 100644 --- a/src/gallium/auxiliary/draw/draw_context.h +++ b/src/gallium/auxiliary/draw/draw_context.h @@ -118,7 +118,7 @@ void draw_delete_vertex_shader(struct draw_context *draw, */ struct draw_geometry_shader * draw_create_geometry_shader(struct draw_context *draw, -const struct pipe_shader_state *shader); +const struct pipe_geometry_shader_state *shader); void draw_bind_geometry_shader(struct draw_context *draw, struct draw_geometry_shader *dvs); void draw_delete_geometry_shader(struct draw_context *draw, diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 283717d..c7f6839 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -36,7 +36,7 @@ struct draw_geometry_shader * draw_create_geometry_shader(struct draw_context *draw, -const struct pipe_shader_state *shader) +const struct pipe_geometry_shader_state *shader) { struct draw_geometry_shader *gs; diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h index 03d0652..67a8cf0 100644 --- a/src/gallium/drivers/softpipe/sp_state.h +++ b/src/gallium/drivers/softpipe/sp_state.h @@ -92,7 +92,7 @@ struct sp_vertex_shader { /** Subclass of pipe_shader_state */ struct sp_geometry_shader { - struct pipe_shader_state shader; + struct pipe_geometry_shader_state shader; struct draw_geometry_shader *draw_data; }; @@ -145,7 +145,7 @@ void *softpipe_create_vs_state(struct pipe_context *, void softpipe_bind_vs_state(struct pipe_context *, void *); void softpipe_delete_vs_state(struct pipe_context *, void *); void *softpipe_create_gs_state(struct pipe_context *, - const struct pipe_shader_state *); + const struct pipe_geometry_shader_state *); void softpipe_bind_gs_state(struct pipe_context *, void *); void softpipe_delete_gs_state(struct pipe_context *, void *); diff --git a/src/gallium/drivers/softpipe/sp_state_fs.c b/src/gallium/drivers/softpipe/sp_state_fs.c index 6c28126..f20110e 100644 --- a/src/gallium/drivers/softpipe/sp_state_fs.c +++ b/src/gallium/drivers/softpipe/sp_state_fs.c @@ -170,7 +170,7 @@ softpipe_set_constant_buffer(struct pipe_context *pipe, void * softpipe_create_gs_state(struct pipe_context *pipe, - const struct pipe_shader_state *templ) + const struct pipe_geometry_shader_state *templ) { struct softpipe_context *softpipe = softpipe_context(pipe); struct sp_geometry_shader *state; @@ -181,8 +181,8 @@ softpipe_create_gs_state(struct pipe_context *pipe, /* copy shader tokens, the ones passed in will go away. */ - state->shader.tokens = tgsi_dup_tokens(templ->tokens); - if (state->shader.tokens == NULL) + state->shader.shader.tokens = tgsi_dup_tokens(templ->shader.tokens); + if (state->shader.shader.tokens == NULL) goto fail; state->draw_data = draw_create_geometry_shader(softpipe->draw, templ); @@ -193,7 +193,7 @@ softpipe_create_gs_state(struct pipe_context *pipe, fail: if (state) { - FREE( (void *)state->shader.tokens ); + FREE( (void *)state->shader.shader.tokens ); FREE( state->draw_data ); FREE( state ); } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: those signatures changed
Module: Mesa Branch: arb_geometry_shader4 Commit: b1d15215e072afdcf737bf640890bd104c3e7e98 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b1d15215e072afdcf737bf640890bd104c3e7e98 Author: Zack Rusin Date: Fri May 29 20:00:55 2009 -0400 gs: those signatures changed --- src/mesa/shader/shader_api.c |6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mesa/shader/shader_api.c b/src/mesa/shader/shader_api.c index a121a72..b88b996 100644 --- a/src/mesa/shader/shader_api.c +++ b/src/mesa/shader/shader_api.c @@ -1108,17 +1108,17 @@ _mesa_program_parameteri(GLcontext *ctx, GLuint program, switch (pname) { case GL_GEOMETRY_VERTICES_OUT_ARB: - gprog = _mesa_geometryFromShader(program); + gprog = _mesa_geometry_from_shader(program); if (gprog) gprog->VerticesOut = value; break; case GL_GEOMETRY_INPUT_TYPE_ARB: - gprog = _mesa_geometryFromShader(program); + gprog = _mesa_geometry_from_shader(program); if (gprog) gprog->InputType = value; break; case GL_GEOMETRY_OUTPUT_TYPE_ARB: - gprog = _mesa_geometryFromShader(program); + gprog = _mesa_geometry_from_shader(program); if (gprog) gprog->OutputType = value; break; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): gallium: fix the front face semantics
Module: Mesa Branch: mesa_7_5_branch Commit: 1c04731b8721850b6abb12a43a3eec616b850e86 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c04731b8721850b6abb12a43a3eec616b850e86 Author: Zack Rusin Date: Wed Jul 1 10:42:58 2009 -0400 gallium: fix the front face semantics mesa allocates both frontface and pointcoord registers within the fog coordinate register, by using swizzling. to make it cleaner and easier for drivers we want each of them in its own register. so when doing compilation from the mesa IR to tgsi allocate new registers for both and add new semantics to the respective declarations. --- src/gallium/drivers/softpipe/sp_setup.c | 27 ++ src/gallium/drivers/softpipe/sp_state_derived.c |1 + src/gallium/include/pipe/p_shader_tokens.h |3 +- src/mesa/state_tracker/st_atom_shader.c | 19 ++- src/mesa/state_tracker/st_mesa_to_tgsi.c| 23 ++- src/mesa/state_tracker/st_program.c |7 +- 6 files changed, 60 insertions(+), 20 deletions(-) diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c index e5be652..1eb23cd 100644 --- a/src/gallium/drivers/softpipe/sp_setup.c +++ b/src/gallium/drivers/softpipe/sp_setup.c @@ -785,11 +785,10 @@ static void setup_tri_coefficients( struct setup_context *setup ) assert(0); } - if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) { - /* FOG.y = front/back facing XXX fix this */ - setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing; - setup->coef[fragSlot].dadx[1] = 0.0; - setup->coef[fragSlot].dady[1] = 0.0; + if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) { + setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing; + setup->coef[fragSlot].dadx[0] = 0.0; + setup->coef[fragSlot].dady[0] = 0.0; } } } @@ -1096,11 +1095,10 @@ setup_line_coefficients(struct setup_context *setup, assert(0); } - if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) { - /* FOG.y = front/back facing XXX fix this */ - setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing; - setup->coef[fragSlot].dadx[1] = 0.0; - setup->coef[fragSlot].dady[1] = 0.0; + if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) { + setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing; + setup->coef[fragSlot].dadx[0] = 0.0; + setup->coef[fragSlot].dady[0] = 0.0; } } return TRUE; @@ -1342,11 +1340,10 @@ setup_point( struct setup_context *setup, assert(0); } - if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FOG) { - /* FOG.y = front/back facing XXX fix this */ - setup->coef[fragSlot].a0[1] = 1.0f - setup->quad.input.facing; - setup->coef[fragSlot].dadx[1] = 0.0; - setup->coef[fragSlot].dady[1] = 0.0; + if (spfs->info.input_semantic_name[fragSlot] == TGSI_SEMANTIC_FACE) { + setup->coef[fragSlot].a0[0] = 1.0f - setup->quad.input.facing; + setup->coef[fragSlot].dadx[0] = 0.0; + setup->coef[fragSlot].dady[0] = 0.0; } } diff --git a/src/gallium/drivers/softpipe/sp_state_derived.c b/src/gallium/drivers/softpipe/sp_state_derived.c index 6b6a4c3..7555100 100644 --- a/src/gallium/drivers/softpipe/sp_state_derived.c +++ b/src/gallium/drivers/softpipe/sp_state_derived.c @@ -110,6 +110,7 @@ softpipe_get_vertex_info(struct softpipe_context *softpipe) break; case TGSI_SEMANTIC_GENERIC: + case TGSI_SEMANTIC_FACE: /* this includes texcoords and varying vars */ src = draw_find_vs_output(softpipe->draw, TGSI_SEMANTIC_GENERIC, spfs->info.input_semantic_index[i]); diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index 4dafdd6..b00cfe3 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -131,7 +131,8 @@ struct tgsi_declaration_range #define TGSI_SEMANTIC_PSIZE4 #define TGSI_SEMANTIC_GENERIC 5 #define TGSI_SEMANTIC_NORMAL 6 -#define TGSI_SEMANTIC_COUNT7 /**< number of semantic values */ +#define TGSI_SEMANTIC_FACE 7 +#define TGSI_SEMANTIC_COUNT8 /**< number of semantic values */ struct tgsi_declaration_semantic { diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index ee649be..c02ccc3 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -137,8 +137,23 @@ find_translated_vp(struct st_context *st, for (inAttr = 0; inAttr < FRAG_ATTRIB_MAX; inA
Mesa (mesa_7_5_branch): gallium: more fog extraction fixes
Module: Mesa Branch: mesa_7_5_branch Commit: a4d952358d8fd0f9d135c91c37969acdcf394f0a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a4d952358d8fd0f9d135c91c37969acdcf394f0a Author: Zack Rusin Date: Mon Jul 6 21:33:56 2009 -0400 gallium: more fog extraction fixes fix the cases when fog coord/front face/point coord are used in the same shader. --- src/mesa/state_tracker/st_atom_shader.c | 21 ++ src/mesa/state_tracker/st_mesa_to_tgsi.c |9 +++- src/mesa/state_tracker/st_program.c | 34 + 3 files changed, 39 insertions(+), 25 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index c02ccc3..299aa76 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -137,22 +137,15 @@ find_translated_vp(struct st_context *st, for (inAttr = 0; inAttr < FRAG_ATTRIB_MAX; inAttr++) { if (fragInputsRead & (1 << inAttr)) { +stfp->input_to_slot[inAttr] = numIn; +numIn++; if ((fragInputsRead & FRAG_BIT_FOGC)) { - if (stfp->Base.UsesPointCoord) { - stfp->input_to_slot[inAttr] = numIn; - numIn++; + /* leave placeholders for the +* extra registers we extract from fog */ + if (stfp->Base.UsesFrontFacing || + stfp->Base.UsesPointCoord) { + numIn += 2; } - if (stfp->Base.UsesFrontFacing) { - stfp->input_to_slot[inAttr] = numIn; - numIn++; - } - if (stfp->Base.UsesFogFragCoord) { - stfp->input_to_slot[inAttr] = numIn; - numIn++; - } -} else { - stfp->input_to_slot[inAttr] = numIn; - numIn++; } } else { diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c b/src/mesa/state_tracker/st_mesa_to_tgsi.c index 3140ebe..8aef3fc 100644 --- a/src/mesa/state_tracker/st_mesa_to_tgsi.c +++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c @@ -122,8 +122,15 @@ map_register_file_index( SWIZZLE_X, SWIZZLE_X, SWIZZLE_X); +/* register after fog */ +return inputMapping[index] + 1; } else { -/* fixme: point coord */ +*swizzle = MAKE_SWIZZLE4(SWIZZLE_Z, + SWIZZLE_W, + SWIZZLE_Z, + SWIZZLE_W); +/* register after frontface */ +return inputMapping[index] + 2; } } /* inputs are mapped according to the user-defined map */ diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 9a346fb..18d1046 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -433,20 +433,34 @@ st_translate_fragment_program(struct st_context *st, stfp->input_semantic_index[slot] = 1; interpMode[slot] = TGSI_INTERPOLATE_LINEAR; break; - case FRAG_ATTRIB_FOGC: -if (stfp->Base.UsesPointCoord) { - stfp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; - stfp->input_semantic_index[slot] = num_generic++; - interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; -} else if (stfp->Base.UsesFrontFacing) { - stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FACE; - stfp->input_semantic_index[slot] = 0; - interpMode[slot] = TGSI_INTERPOLATE_CONSTANT; -} else { + case FRAG_ATTRIB_FOGC: { +int extra_decls = 0; +if (stfp->Base.UsesFogFragCoord) { stfp->input_semantic_name[slot] = TGSI_SEMANTIC_FOG; stfp->input_semantic_index[slot] = 0; interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; + input_flags[slot] = stfp->Base.Base.InputFlags[attr]; + ++extra_decls; } +if (stfp->Base.UsesFrontFacing) { + GLint idx = slot + extra_decls; + stfp->input_semantic_name[idx] = TGSI_SEMANTIC_FACE; + stfp->input_semantic_index[idx] = 0; + interpMode[idx] = TGSI_INTERPOLATE_CONSTANT; + input_flags[idx] = stfp->Base.Base.InputFlags[attr]; + ++extra_decls; +} +if (stfp->Base.UsesPointCoord) { + GLint idx = slot + extra_decls; + stfp->input_semantic_name[idx] = TGSI_SEMANTIC_GENERIC; + stfp->input_semantic_index[idx] = num_gener
Mesa (master): docs: asst updates to openvg.html
Module: Mesa Branch: master Commit: d6318ba8a856c5a61c402fce43c3fa56c414064a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6318ba8a856c5a61c402fce43c3fa56c414064a Author: Brian Paul Date: Fri May 1 11:37:09 2009 -0600 docs: asst updates to openvg.html --- docs/openvg.html | 34 +++--- 1 files changed, 27 insertions(+), 7 deletions(-) diff --git a/docs/openvg.html b/docs/openvg.html index a8153b9..442ee52 100644 --- a/docs/openvg.html +++ b/docs/openvg.html @@ -14,7 +14,9 @@ The current version of the OpenVG state tracker implements OpenVG 1.0. -More informations about OpenVG can be found at http://www.khronos.org/openvg/";>http://www.khronos.org/openvg/ . +More informations about OpenVG can be found at +http://www.khronos.org/openvg/"; target="_parent"> +http://www.khronos.org/openvg/ . The OpenVG state tracker depends on the Gallium architecture and a working EGL implementation. @@ -31,14 +33,32 @@ The OpenVG state tracker depends on the Gallium architecture and a working EGL i Sample build A sample build looks as follows: -make linux-x86-64-debug -cd src/gallium/state_trackers/vega -make -cd ../../../.. -export LD_LIBRARY_PATH=$PWD/lib64 -export EGL_DRIVER="egl_softpipe" + make linux-x86-64-debug + cd src/gallium/state_trackers/vega + make + cd ../../../.. + export LD_LIBRARY_PATH=$PWD/lib64 + export EGL_DRIVER="egl_softpipe" +OpenVG Demos + + +To build the OpenVG demos: + + + cd progs/openvg + make + + +To run a demo: + + + cd openvg/demos + ./lion + + + Notes EGL_DRIVER environmental variable: forces usage of a specific EGL driver. Unless you force egl_softpipe the implementation will look for a DRI hardware accelerate driver and unless you have a Gallium driver that supports it, you'll see crashes ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): OpenVG 1.0 State Tracker
Module: Mesa Branch: master Commit: 544dd4b11f7be76bb00fe29a60eaf2772dcc69ca URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=544dd4b11f7be76bb00fe29a60eaf2772dcc69ca Author: Zack Rusin Date: Fri May 1 12:41:38 2009 -0400 OpenVG 1.0 State Tracker Import of the OpenVG 1.0 state tracker for Gallium. --- docs/openvg.html| 48 + include/VG/openvg.h | 686 include/VG/vgext.h | 233 +++ include/VG/vgplatform.h | 106 ++ include/VG/vgu.h| 130 ++ progs/openvg/demos/Makefile | 40 + progs/openvg/demos/gears.c | 394 + progs/openvg/demos/lion-render.c| 1573 ++ progs/openvg/demos/lion-render.h| 16 + progs/openvg/demos/lion.c | 288 progs/openvg/demos/sp.c | 103 ++ progs/openvg/trivial/Makefile | 127 ++ progs/openvg/trivial/arc.c | 139 ++ progs/openvg/trivial/cap.c | 75 + progs/openvg/trivial/clear.c| 42 + progs/openvg/trivial/coord.c| 66 + progs/openvg/trivial/dash.c | 95 ++ progs/openvg/trivial/eglcommon.c| 288 progs/openvg/trivial/eglcommon.h| 20 + progs/openvg/trivial/ellipse.c | 84 + progs/openvg/trivial/filter.c | 107 ++ progs/openvg/trivial/gradorigin.c | 98 ++ progs/openvg/trivial/lineto.c | 56 + progs/openvg/trivial/lingrad.c | 87 + progs/openvg/trivial/lookup.c | 71 + progs/openvg/trivial/mask.c | 58 + progs/openvg/trivial/mask4.c| 132 ++ progs/openvg/trivial/path3.c| 77 + progs/openvg/trivial/radialgrad.c | 99 ++ progs/openvg/trivial/readpixels.c | 75 + progs/openvg/trivial/roundedrect.c | 67 + progs/openvg/trivial/star-nonzero.c | 55 + progs/openvg/trivial/star-oddeven.c | 102 ++ progs/openvg/trivial/stroke.c | 116 ++ progs/openvg/trivial/stroke2.c | 207 +++ progs/openvg/trivial/vguarc.c | 74 + src/gallium/state_trackers/vega/Makefile| 128 ++ src/gallium/state_trackers/vega/api_consts.h| 56 + src/gallium/state_trackers/vega/api_context.c | 75 + src/gallium/state_trackers/vega/api_filters.c | 805 + src/gallium/state_trackers/vega/api_images.c| 489 ++ src/gallium/state_trackers/vega/api_masks.c | 373 + src/gallium/state_trackers/vega/api_misc.c | 83 + src/gallium/state_trackers/vega/api_paint.c | 166 ++ src/gallium/state_trackers/vega/api_params.c| 1673 +++ src/gallium/state_trackers/vega/api_path.c | 488 ++ src/gallium/state_trackers/vega/api_text.c | 258 +++ src/gallium/state_trackers/vega/api_transform.c | 128 ++ src/gallium/state_trackers/vega/arc.c | 708 src/gallium/state_trackers/vega/arc.h | 80 + src/gallium/state_trackers/vega/asm_fill.h | 246 +++ src/gallium/state_trackers/vega/asm_filters.h | 117 ++ src/gallium/state_trackers/vega/asm_util.h | 136 ++ src/gallium/state_trackers/vega/bezier.c| 704 src/gallium/state_trackers/vega/bezier.h| 81 + src/gallium/state_trackers/vega/image.c | 654 src/gallium/state_trackers/vega/image.h | 104 ++ src/gallium/state_trackers/vega/mask.c | 690 src/gallium/state_trackers/vega/mask.h | 68 + src/gallium/state_trackers/vega/matrix.h| 462 + src/gallium/state_trackers/vega/paint.c | 699 src/gallium/state_trackers/vega/paint.h | 118 ++ src/gallium/state_trackers/vega/path.c | 2034 +++ src/gallium/state_trackers/vega/path.h | 126 ++ src/gallium/state_trackers/vega/path_utils.h| 109 ++ src/gallium/state_trackers/vega/polygon.c | 550 ++ src/gallium/state_trackers/vega/polygon.h | 75 + src/gallium/state_trackers/vega/renderer.c | 592 +++ src/gallium/state_trackers/vega/renderer.h | 76 + src/gallium/state_trackers/vega/shader.c| 310 src/gallium/state_trackers/vega/shader.h| 56 + src/gallium/state_trackers/vega/shaders_cache.c | 439 + src/gallium/state_trackers/vega/shaders_cache.h | 77 + src/gallium/state_trackers/vega/st_inlines.h| 159 ++ src/gallium/state_trackers/vega/stroker.c | 1349 +++ src/gallium/state_trackers/vega/stroker.h | 89 + src/gallium/state_trackers/vega/util_array.h| 122 ++ src/gallium
Mesa (master): exa: some infrastucture work for accelerating composite
Module: Mesa Branch: master Commit: 21cce6afb03bf9b9adfc6d8a1a446bb3ef22c7a8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=21cce6afb03bf9b9adfc6d8a1a446bb3ef22c7a8 Author: Zack Rusin Date: Mon Jun 8 00:07:04 2009 -0400 exa: some infrastucture work for accelerating composite --- src/gallium/state_trackers/xorg/xorg_composite.c | 27 ++ src/gallium/state_trackers/xorg/xorg_composite.h | 22 + src/gallium/state_trackers/xorg/xorg_exa.c | 98 +++--- src/gallium/state_trackers/xorg/xorg_exa.h | 27 ++ src/gallium/state_trackers/xorg/xorg_tracker.h |5 +- 5 files changed, 130 insertions(+), 49 deletions(-) diff --git a/src/gallium/state_trackers/xorg/xorg_composite.c b/src/gallium/state_trackers/xorg/xorg_composite.c new file mode 100644 index 000..255ae91 --- /dev/null +++ b/src/gallium/state_trackers/xorg/xorg_composite.c @@ -0,0 +1,27 @@ +#include "xorg_composite.h" + + +boolean xorg_composite_accelerated(int op, + PicturePtr pSrcPicture, + PicturePtr pMaskPicture, + PicturePtr pDstPicture) +{ + return FALSE; +} + +boolean xorg_composite_bind_state(struct exa_context *exa, + int op, + PicturePtr pSrcPicture, + PicturePtr pMaskPicture, + PicturePtr pDstPicture) +{ + return FALSE; +} + +void xorg_composite(struct exa_context *exa, +struct exa_pixmap_priv *dst, +int srcX, int srcY, int maskX, int maskY, +int dstX, int dstY, int width, int height) +{ +} + diff --git a/src/gallium/state_trackers/xorg/xorg_composite.h b/src/gallium/state_trackers/xorg/xorg_composite.h new file mode 100644 index 000..a52e0e6 --- /dev/null +++ b/src/gallium/state_trackers/xorg/xorg_composite.h @@ -0,0 +1,22 @@ +#ifndef XORG_COMPOSITE_H +#define XORG_COMPOSITE_H + +#include "xorg_exa.h" + +boolean xorg_composite_accelerated(int op, + PicturePtr pSrcPicture, + PicturePtr pMaskPicture, + PicturePtr pDstPicture); + +boolean xorg_composite_bind_state(struct exa_context *exa, + int op, + PicturePtr pSrcPicture, + PicturePtr pMaskPicture, + PicturePtr pDstPicture); + +void xorg_composite(struct exa_context *exa, +struct exa_pixmap_priv *dst, +int srcX, int srcY, int maskX, int maskY, +int dstX, int dstY, int width, int height); + +#endif diff --git a/src/gallium/state_trackers/xorg/xorg_exa.c b/src/gallium/state_trackers/xorg/xorg_exa.c index 0fbfed1..2c4291a 100644 --- a/src/gallium/state_trackers/xorg/xorg_exa.c +++ b/src/gallium/state_trackers/xorg/xorg_exa.c @@ -28,9 +28,14 @@ * */ -#include "xorg-server.h" -#include "xf86.h" +#include "xorg_exa.h" #include "xorg_tracker.h" +#include "xorg_composite.h" + +#include +#include +#include +#include #include "pipe/p_format.h" #include "pipe/p_context.h" @@ -39,24 +44,6 @@ #include "util/u_rect.h" -struct exa_entity -{ -ExaDriverPtr pExa; -struct pipe_context *ctx; -struct pipe_screen *scrn; -}; - -struct PixmapPriv -{ -int flags; -struct pipe_texture *tex; -unsigned int color; -struct pipe_surface *src_surf; /* for copies */ - -struct pipe_transfer *map_transfer; -unsigned map_count; -}; - /* * Helper functions */ @@ -113,8 +100,8 @@ ExaPrepareAccess(PixmapPtr pPix, int index) ScreenPtr pScreen = pPix->drawable.pScreen; ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; modesettingPtr ms = modesettingPTR(pScrn); -struct exa_entity *exa = ms->exa; -struct PixmapPriv *priv; +struct exa_context *exa = ms->exa; +struct exa_pixmap_priv *priv; priv = exaGetPixmapDriverPrivate(pPix); @@ -145,8 +132,8 @@ ExaFinishAccess(PixmapPtr pPix, int index) ScreenPtr pScreen = pPix->drawable.pScreen; ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; modesettingPtr ms = modesettingPTR(pScrn); -struct exa_entity *exa = ms->exa; -struct PixmapPriv *priv; +struct exa_context *exa = ms->exa; +struct exa_pixmap_priv *priv; priv = exaGetPixmapDriverPrivate(pPix); if (!priv) @@ -168,8 +155,8 @@ ExaDone(PixmapPtr pPixmap) { ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum]; modesettingPtr ms = modesettingPTR(pScrn); -struct PixmapPriv *priv = exaGetPixmapDriverPrivate(pPixmap); -struct exa_entity *exa = ms->exa; +struct exa_pixmap_priv *
Mesa (master): vg: remove a silly demo and add a bit better one
Module: Mesa Branch: master Commit: 54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=54324d9e0c6956bdc7bc9b0620fe53c8e6b66a04 Author: Zack Rusin Date: Fri May 1 19:08:32 2009 -0400 vg: remove a silly demo and add a bit better one --- progs/openvg/demos/Makefile | 19 +- progs/openvg/demos/{gears.c => eglcommon.c} | 236 -- progs/openvg/demos/eglcommon.h | 20 ++ progs/openvg/demos/sp.c | 466 ++- 4 files changed, 544 insertions(+), 197 deletions(-) diff --git a/progs/openvg/demos/Makefile b/progs/openvg/demos/Makefile index 7ecb987..6e15342 100644 --- a/progs/openvg/demos/Makefile +++ b/progs/openvg/demos/Makefile @@ -7,8 +7,8 @@ VG_LIBS=-lm -pthread -lEGL -lOpenVG INCLUDE_DIRS = -I$(TOP)/include PROGRAMS = \ - gears \ -lion +lion \ +sp .c.o: $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@ @@ -17,14 +17,6 @@ PROGRAMS = \ default: $(PROGRAMS) - -gears: gears.o - $(CC) $(CFLAGS) gears.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o $@ - -gears.o: gears.c $(HEADERS) - $(CC) -c $(CFLAGS) -I$(TOP)/include gears.c - - lion: lion.o lion-render.o $(CC) $(CFLAGS) lion.o lion-render.o -L$(TOP)/$(LIB_DIR) $(VG_LIBS) -o $@ @@ -34,6 +26,13 @@ lion-render.o: lion-render.c lion-render.h $(HEADERS) $(CC) -c $(CFLAGS) -I$(TOP)/include lion-render.c +sp: sp.c eglcommon.o + $(CC) $(INCLUDE_DIRS) $(CFLAGS) $^ -L$(TOP)/$(LIB_DIR) $(LIBS) $(VG_LIBS) $(APP_LIB_DEPS) -o $@ + +eglcommon.o: eglcommon.c $(HEADERS) + $(CC) -c $(INCLUDE_DIRS) $(CFLAGS) eglcommon.c + + clean: rm -f *.o *~ rm -f *.so diff --git a/progs/openvg/demos/gears.c b/progs/openvg/demos/eglcommon.c similarity index 56% rename from progs/openvg/demos/gears.c rename to progs/openvg/demos/eglcommon.c index 7dcb395..bacd568 100644 --- a/progs/openvg/demos/gears.c +++ b/progs/openvg/demos/eglcommon.c @@ -1,3 +1,6 @@ +#include "eglcommon.h" + + #include #include #include @@ -6,157 +9,23 @@ #include #include #include -#include +#include /* using full OpenGL for now */ #include -static VGint width, height; -static VGPath gear1; -static VGPath gear2; -static VGPath gear3; - -static VGPaint fill; -const VGfloat color[4] = {0.5, 0.5, 0.5, 1.0}; - -static VGfloat gear1_angle = 35; -static VGfloat gear2_angle = 24; -static VGfloat gear3_angle = 33.5; - -static void moveTo(VGPath path, VGfloat x, VGfloat y) -{ - static VGubyte moveTo = VG_MOVE_TO | VG_ABSOLUTE; - VGfloat pathData[2]; - pathData[0] = x; pathData[1] = y; - vgAppendPathData(path, 1, &moveTo, pathData); -} - -static void lineTo(VGPath path, VGfloat x, VGfloat y) -{ - static VGubyte lineTo = VG_LINE_TO | VG_ABSOLUTE; - VGfloat pathData[2]; - pathData[0] = x; pathData[1] = y; - vgAppendPathData(path, 1, &lineTo, pathData); -} - -static void closeSubpath(VGPath path) -{ - static VGubyte close = VG_CLOSE_PATH | VG_ABSOLUTE; - VGfloat pathData[2]; - vgAppendPathData(path, 1, &close, pathData); -} - -static void cubicTo(VGPath path, VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, - VGfloat midx, VGfloat midy) -{ - static VGubyte cubic = VG_CUBIC_TO | VG_ABSOLUTE; - VGfloat pathData[6]; - pathData[0] = x1; - pathData[1] = y1; - pathData[2] = x2; - pathData[3] = y2; - pathData[4] = midx; - pathData[5] = midy; - vgAppendPathData(path, 1, &cubic, pathData); -} - -static VGPath gearsPath(double inner_radius, double outer_radius, -int teeth, double tooth_depth) -{ - VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, - 0, 0, (unsigned int)VG_PATH_CAPABILITY_ALL); - - int i; - double r0, r1, r2; - double angle, da; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0; - r2 = outer_radius + tooth_depth / 2.0; - - da = 2.0 * M_PI / (VGfloat) teeth / 4.0; - angle = 0.0; - moveTo(path, r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da)); - - for (i = 1; i <= teeth; i++) { - angle = i * 2.0 * M_PI / (VGfloat)teeth; - - lineTo(path, r1 * cos(angle), r1 * sin(angle)); - lineTo(path, r2 * cos(angle + da), r2 * sin(angle + da)); - lineTo(path, r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da)); - - if (i < teeth) - lineTo(path, r1 * cos(angle + 3 * da), -r1 * sin(angle + 3 * da)); - } +static init_funcinit = 0; +static draw_funcdraw = 0; +static reshape_func reshape = 0; +static key_func keyPress = 0; +static VGint width = 300, height = 300; - closeSubpath(path); - moveTo(path, r0 * cos(angle + 3 * da), r0 * sin(angle + 3 * da)); - - for (i = 1; i <= teeth; i++) { - angle = i * 2.0 * M_PI / (VGfloat) teeth; - - lineTo(path, r0 * cos(angle), r0 * sin(angle)); -
Mesa (master): util: fix possible null pointer usage
Module: Mesa Branch: master Commit: 4873031e29e0e8f654f78307e6ec885e68a54d86 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4873031e29e0e8f654f78307e6ec885e68a54d86 Author: Zack Rusin Date: Sat Jun 20 21:19:57 2009 -0400 util: fix possible null pointer usage found by the clang static analyzer --- src/gallium/auxiliary/util/u_cache.c| 10 +- src/gallium/auxiliary/util/u_handle_table.c | 13 + src/gallium/auxiliary/util/u_hash_table.c | 22 +- src/gallium/auxiliary/util/u_keymap.c | 12 +++- 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/gallium/auxiliary/util/u_cache.c b/src/gallium/auxiliary/util/u_cache.c index 41cd381..47c16b1 100644 --- a/src/gallium/auxiliary/util/u_cache.c +++ b/src/gallium/auxiliary/util/u_cache.c @@ -137,6 +137,8 @@ util_cache_set(struct util_cache *cache, struct util_cache_entry *entry; assert(cache); + if (!cache) + return; entry = util_cache_entry_get(cache, key); util_cache_entry_destroy(cache, entry); @@ -158,6 +160,8 @@ util_cache_get(struct util_cache *cache, struct util_cache_entry *entry; assert(cache); + if (!cache) + return NULL; entry = util_cache_entry_get(cache, key); if(!entry->key && !entry->value) @@ -176,7 +180,9 @@ util_cache_clear(struct util_cache *cache) uint32_t i; assert(cache); - + if (!cache) + return; + for(i = 0; i < cache->size; ++i) util_cache_entry_destroy(cache, &cache->entries[i]); } @@ -186,6 +192,8 @@ void util_cache_destroy(struct util_cache *cache) { assert(cache); + if (!cache) + return; #ifdef DEBUG if(cache->count >= 20*cache->size) { diff --git a/src/gallium/auxiliary/util/u_handle_table.c b/src/gallium/auxiliary/util/u_handle_table.c index 6da7353..3703718 100644 --- a/src/gallium/auxiliary/util/u_handle_table.c +++ b/src/gallium/auxiliary/util/u_handle_table.c @@ -87,6 +87,8 @@ handle_table_set_destroy(struct handle_table *ht, void (*destroy)(void *object)) { assert(ht); + if (!ht) + return; ht->destroy = destroy; } @@ -155,7 +157,7 @@ handle_table_add(struct handle_table *ht, assert(ht); assert(object); - if(!object) + if(!object || !ht) return 0; /* linear search for an empty handle */ @@ -193,7 +195,7 @@ handle_table_set(struct handle_table *ht, assert(ht); assert(handle); - if(!handle) + if(!handle || !ht) return 0; assert(object); @@ -222,7 +224,7 @@ handle_table_get(struct handle_table *ht, assert(ht); assert(handle); - if(!handle || handle > ht->size) + if(!handle || !ht || handle > ht->size) return NULL; object = ht->objects[handle - 1]; @@ -240,7 +242,7 @@ handle_table_remove(struct handle_table *ht, assert(ht); assert(handle); - if(!handle || handle > ht->size) + if(!handle || !ht || handle > ht->size) return; index = handle - 1; @@ -283,6 +285,9 @@ handle_table_destroy(struct handle_table *ht) unsigned index; assert(ht); + if (!ht) + return; + if(ht->destroy) for(index = 0; index < ht->size; ++index) handle_table_clear(ht, index); diff --git a/src/gallium/auxiliary/util/u_hash_table.c b/src/gallium/auxiliary/util/u_hash_table.c index 2f83e31..8c2a8f4 100644 --- a/src/gallium/auxiliary/util/u_hash_table.c +++ b/src/gallium/auxiliary/util/u_hash_table.c @@ -148,6 +148,8 @@ hash_table_set(struct hash_table *ht, struct cso_hash_iter iter; assert(ht); + if (!ht) + return PIPE_ERROR_BAD_INPUT; key_hash = ht->hash(key); @@ -183,6 +185,8 @@ hash_table_get(struct hash_table *ht, struct hash_table_item *item; assert(ht); + if (!ht) + return NULL; key_hash = ht->hash(key); @@ -203,6 +207,8 @@ hash_table_remove(struct hash_table *ht, struct hash_table_item *item; assert(ht); + if (!ht) + return; key_hash = ht->hash(key); @@ -225,7 +231,9 @@ hash_table_clear(struct hash_table *ht) struct hash_table_item *item; assert(ht); - + if (!ht) + return; + iter = cso_hash_first_node(ht->cso); while (!cso_hash_iter_is_null(iter)) { item = (struct hash_table_item *)cso_hash_take(ht->cso, cso_hash_iter_key(iter)); @@ -243,9 +251,11 @@ hash_table_foreach(struct hash_table *ht, struct cso_hash_iter iter; struct hash_table_item *item; enum pipe_error result; - + assert(ht); - + if (!ht) + return PIPE_ERROR_BAD_INPUT; + iter = cso_hash_first_node(ht->cso); while (!cso_hash_iter_is_null(iter)) { item = (struct hash_table_item *)cso_hash_iter_data(iter); @@ -264,9 +274,11 @@ hash_table_destroy(struct hash_table *ht) { struct cso_hash_iter iter; struct hash_table_item *item; - + asse
Mesa (master): cso: possible null pointer dereference
Module: Mesa Branch: master Commit: f311893bf4cd4e20e5b43fa404c4a2f656791943 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f311893bf4cd4e20e5b43fa404c4a2f656791943 Author: Zack Rusin Date: Sat Jun 20 21:25:47 2009 -0400 cso: possible null pointer dereference reported by clang static analyzer --- src/gallium/auxiliary/cso_cache/cso_cache.c |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/cso_cache/cso_cache.c b/src/gallium/auxiliary/cso_cache/cso_cache.c index 0bc77a5..e6dce3f 100644 --- a/src/gallium/auxiliary/cso_cache/cso_cache.c +++ b/src/gallium/auxiliary/cso_cache/cso_cache.c @@ -361,6 +361,10 @@ void cso_for_each_state(struct cso_cache *sc, enum cso_cache_type type, void cso_cache_delete(struct cso_cache *sc) { assert(sc); + + if (!sc) + return; + /* delete driver data */ cso_for_each_state(sc, CSO_BLEND, delete_blend_state, 0); cso_for_each_state(sc, CSO_DEPTH_STENCIL_ALPHA, delete_depth_stencil_state, 0); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): pipebuffer: handle possible null pointer dereference
Module: Mesa Branch: master Commit: 5920b6b67988fc3977f43b39d8546cc20247bf31 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5920b6b67988fc3977f43b39d8546cc20247bf31 Author: Zack Rusin Date: Sat Jun 20 21:36:40 2009 -0400 pipebuffer: handle possible null pointer dereference reported by clang static analyzer --- .../auxiliary/pipebuffer/pb_buffer_malloc.c|2 ++ .../auxiliary/pipebuffer/pb_bufmgr_ondemand.c |2 ++ 2 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c index 0760d60..6bdce5f 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c +++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_malloc.c @@ -53,6 +53,8 @@ static INLINE struct malloc_buffer * malloc_buffer(struct pb_buffer *buf) { assert(buf); + if (!buf) + return NULL; assert(buf->vtbl == &malloc_buffer_vtbl); return (struct malloc_buffer *)buf; } diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c index bc3093f..cb32d25 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_ondemand.c @@ -74,6 +74,8 @@ static INLINE struct pb_ondemand_buffer * pb_ondemand_buffer(struct pb_buffer *buf) { assert(buf); + if (!buf) + return NULL; assert(buf->vtbl == &pb_ondemand_buffer_vtbl); return (struct pb_ondemand_buffer *)buf; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: rearrange some members to avoid memory holes/ padding
Module: Mesa Branch: master Commit: 124a6b1958c630ea049025e2b72547096fdc8f2c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=124a6b1958c630ea049025e2b72547096fdc8f2c Author: Zack Rusin Date: Tue Jun 23 19:12:46 2009 -0400 gallium: rearrange some members to avoid memory holes/padding plus it saves us a cacheline in the cso --- src/gallium/auxiliary/cso_cache/cso_context.c |4 ++-- src/gallium/include/pipe/p_state.h| 12 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c b/src/gallium/auxiliary/cso_cache/cso_context.c index f388bf5..36c882a 100644 --- a/src/gallium/auxiliary/cso_cache/cso_context.c +++ b/src/gallium/auxiliary/cso_cache/cso_context.c @@ -55,14 +55,14 @@ struct cso_context { void *samplers[PIPE_MAX_SAMPLERS]; unsigned nr_samplers; - void *samplers_saved[PIPE_MAX_SAMPLERS]; unsigned nr_samplers_saved; + void *samplers_saved[PIPE_MAX_SAMPLERS]; struct pipe_texture *textures[PIPE_MAX_SAMPLERS]; uint nr_textures; - struct pipe_texture *textures_saved[PIPE_MAX_SAMPLERS]; uint nr_textures_saved; + struct pipe_texture *textures_saved[PIPE_MAX_SAMPLERS]; /** Current and saved state. * The saved state is used as a 1-deep stack. diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index 932c024..626bedb 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -75,11 +75,11 @@ struct pipe_surface; */ struct pipe_buffer { - struct pipe_reference reference; - struct pipe_screen *screen; - unsigned alignment; - unsigned usage; - unsigned size; + struct pipe_reference reference; + unsigned size; + struct pipe_screen*screen; + unsigned alignment; + unsigned usage; }; @@ -286,10 +286,10 @@ struct pipe_surface unsigned offset; /**< offset from start of buffer, in bytes */ unsigned usage; /**< PIPE_BUFFER_USAGE_* */ + unsigned zslice; struct pipe_texture *texture; /**< texture into which this is a view */ unsigned face; unsigned level; - unsigned zslice; }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Merge commit 'origin/openvg-1.0'
Module: Mesa Branch: master Commit: edb02671704aeb60e3eeaa7f58c73f4845c5b7e2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=edb02671704aeb60e3eeaa7f58c73f4845c5b7e2 Author: Zack Rusin Date: Mon Jul 6 21:43:26 2009 -0400 Merge commit 'origin/openvg-1.0' --- ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): gallium: fixup register indexes for fog/frontface/ point coord
Module: Mesa Branch: mesa_7_5_branch Commit: 7b861b9b9efdb3ac0dfc3806afcd494cd0ea006c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7b861b9b9efdb3ac0dfc3806afcd494cd0ea006c Author: Zack Rusin Date: Tue Jul 7 12:48:50 2009 -0700 gallium: fixup register indexes for fog/frontface/point coord --- src/mesa/state_tracker/st_atom_shader.c | 15 --- 1 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index 299aa76..5219119 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -142,9 +142,18 @@ find_translated_vp(struct st_context *st, if ((fragInputsRead & FRAG_BIT_FOGC)) { /* leave placeholders for the * extra registers we extract from fog */ - if (stfp->Base.UsesFrontFacing || - stfp->Base.UsesPointCoord) { - numIn += 2; + if (stfp->Base.UsesFrontFacing) { + if (!stfp->Base.UsesFogFragCoord) + --stfp->input_to_slot[inAttr]; + else + ++numIn; + } + if (stfp->Base.UsesPointCoord) { + if (!stfp->Base.UsesFrontFacing && + !stfp->Base.UsesFogFragCoord) + stfp->input_to_slot[inAttr] -= 2; + else + ++numIn; } } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (mesa_7_5_branch): gallium: compare the actual register, not all the inputs
Module: Mesa Branch: mesa_7_5_branch Commit: 1c1307e7c55844f63f7bd7ac02c64f4b936f3c66 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1c1307e7c55844f63f7bd7ac02c64f4b936f3c66 Author: Zack Rusin Date: Sat Jul 11 13:48:41 2009 -0400 gallium: compare the actual register, not all the inputs otherwise we decrement indexes for all registers --- src/mesa/state_tracker/st_atom_shader.c |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c index 5219119..8b3bb5c 100644 --- a/src/mesa/state_tracker/st_atom_shader.c +++ b/src/mesa/state_tracker/st_atom_shader.c @@ -139,7 +139,7 @@ find_translated_vp(struct st_context *st, if (fragInputsRead & (1 << inAttr)) { stfp->input_to_slot[inAttr] = numIn; numIn++; -if ((fragInputsRead & FRAG_BIT_FOGC)) { +if (((1 << inAttr) & FRAG_BIT_FOGC)) { /* leave placeholders for the * extra registers we extract from fog */ if (stfp->Base.UsesFrontFacing) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: fix getters
Module: Mesa Branch: arb_geometry_shader4 Commit: 67d7ef2f562a694ed011c8ca27eb06a148d1025f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=67d7ef2f562a694ed011c8ca27eb06a148d1025f Author: Zack Rusin Date: Mon Jul 13 16:55:18 2009 -0400 gs: fix getters --- src/mesa/main/get.c | 68 +++- src/mesa/main/get_gen.py | 16 src/mesa/shader/slang/slang_codegen.c |2 +- 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 35c8aeb..caf8cf4 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1867,6 +1867,30 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) CHECK_EXT1(ARB_vertex_shader, "GetBooleanv"); params[0] = INT_TO_BOOLEAN(MAX_COMBINED_TEXTURE_IMAGE_UNITS); break; + case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryTextureImageUnit); + break; + case GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryOutputVertices); + break; + case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryTotalOutputComponents); + break; + case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryUniformComponents); + break; + case GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxGeometryVaryingComponents); + break; + case GL_MAX_VERTEX_VARYING_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetBooleanv"); + params[0] = INT_TO_BOOLEAN(ctx->Const.GeometryProgram.MaxVertexVaryingComponents); + break; case GL_CURRENT_PROGRAM: CHECK_EXT1(ARB_shader_objects, "GetBooleanv"); params[0] = INT_TO_BOOLEAN(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0); @@ -3689,6 +3713,30 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) CHECK_EXT1(ARB_vertex_shader, "GetFloatv"); params[0] = (GLfloat)(MAX_COMBINED_TEXTURE_IMAGE_UNITS); break; + case GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxGeometryTextureImageUnit); + break; + case GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxGeometryOutputVertices); + break; + case GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxGeometryTotalOutputComponents); + break; + case GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxGeometryUniformComponents); + break; + case GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxGeometryVaryingComponents); + break; + case GL_MAX_VERTEX_VARYING_COMPONENTS_ARB: + CHECK_EXT1(ARB_geometry_shader4, "GetFloatv"); + params[0] = (GLfloat)(ctx->Const.GeometryProgram.MaxVertexVaryingComponents); + break; case GL_CURRENT_PROGRAM: CHECK_EXT1(ARB_shader_objects, "GetFloatv"); params[0] = (GLfloat)(ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0); @@ -5511,15 +5559,6 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) CHECK_EXT1(ARB_vertex_shader, "GetIntegerv"); params[0] = MAX_COMBINED_TEXTURE_IMAGE_UNITS; break; - case GL_CURRENT_PROGRAM: - CHECK_EXT1(ARB_shader_objects, "GetIntegerv"); - params[0] = ctx->Shader.CurrentProgram ? ctx->Shader.CurrentProgram->Name : 0; - break; - case GL_MAX_SAMPLES: - CHECK_EXT1(ARB_framebuffer_object, "GetIntegerv"); - params[0] = ctx->Const.MaxSamples; - break; -<<<<<<< HEAD:src/mesa/main/get.c case GL_MAX_GEOMETRY_TEXTUR
Mesa (arb_geometry_shader4): gs: use mesa_realloc like the code for fs and vs
Module: Mesa Branch: arb_geometry_shader4 Commit: 856c41deb0d890f92a7f7158d4e27a1c34a1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=856c41deb0d890f92a7f7158d4e27a1c34a1 Author: Zack Rusin Date: Mon Jul 13 17:28:36 2009 -0400 gs: use mesa_realloc like the code for fs and vs --- src/mesa/state_tracker/st_program.c | 13 +++-- 1 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 6c0d61d..27862cd 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -593,7 +593,7 @@ st_translate_geometry_program(struct st_context *st, const GLuint inputMapping[]) { struct pipe_context *pipe = st->pipe; - struct tgsi_token tokens[ST_MAX_SHADER_TOKENS]; + struct tgsi_token *tokens; GLuint *outputMapping; GLuint defaultInputMapping[GEOM_ATTRIB_MAX]; GLuint defaultOutputMapping[GEOM_RESULT_MAX]; @@ -616,6 +616,13 @@ st_translate_geometry_program(struct st_context *st, GLint i; + tokens = (struct tgsi_token *)MALLOC(ST_MAX_SHADER_TOKENS * sizeof *tokens); + if(!tokens) { + /* FIXME: propagate error to the caller */ + assert(0); + return; + } + memset(&gs, 0, sizeof(gs)); memset(input_flags, 0, sizeof(input_flags)); memset(output_flags, 0, sizeof(output_flags)); @@ -792,7 +799,9 @@ st_translate_geometry_program(struct st_context *st, assert(num_tokens < ST_MAX_SHADER_TOKENS); gs.shader.tokens = (struct tgsi_token *) - mem_dup(tokens, num_tokens * sizeof(tokens[0])); + _mesa_realloc(tokens, +ST_MAX_SHADER_TOKENS * sizeof *tokens, +num_tokens * sizeof *tokens); gs.vertices_out = stgp->Base.VerticesOut; gs.input_type = stgp->Base.InputType; gs.output_type = stgp->Base.OutputType; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: initialize the machine
Module: Mesa Branch: arb_geometry_shader4 Commit: 92b8a37bbe827c8191af385c84cd876c68da4074 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=92b8a37bbe827c8191af385c84cd876c68da4074 Author: Zack Rusin Date: Tue Jul 14 00:02:46 2009 -0400 gs: initialize the machine --- src/gallium/auxiliary/draw/draw_context.c |3 +++ src/gallium/auxiliary/draw/draw_gs.c | 20 src/gallium/auxiliary/draw/draw_private.h |5 + 3 files changed, 28 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c index a4f1fcd..d891b92 100644 --- a/src/gallium/auxiliary/draw/draw_context.c +++ b/src/gallium/auxiliary/draw/draw_context.c @@ -67,6 +67,9 @@ struct draw_context *draw_create( void ) if (!draw_vs_init( draw )) goto fail; + if (!draw_gs_init( draw )) + goto fail; + return draw; fail: diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 3911766..a51cae9 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -36,6 +36,26 @@ #include "util/u_math.h" #include "util/u_memory.h" +#define MAX_PRIM_VERTICES 6 + +boolean +draw_gs_init( struct draw_context *draw ) +{ + tgsi_exec_machine_init(&draw->gs.machine); + + draw->gs.machine.Inputs = align_malloc(MAX_PRIM_VERTICES * + PIPE_MAX_ATTRIBS * sizeof(struct tgsi_exec_vector), 16); + if (!draw->gs.machine.Inputs) + return FALSE; + + draw->gs.machine.Outputs = align_malloc(MAX_PRIM_VERTICES * + PIPE_MAX_ATTRIBS * sizeof(struct tgsi_exec_vector), 16); + if (!draw->gs.machine.Outputs) + return FALSE; + + return TRUE; +} + struct draw_geometry_shader * draw_create_geometry_shader(struct draw_context *draw, diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h index 44050bd..260e191 100644 --- a/src/gallium/auxiliary/draw/draw_private.h +++ b/src/gallium/auxiliary/draw/draw_private.h @@ -262,6 +262,11 @@ void draw_vs_set_constants( struct draw_context *, +/*** + * Geometry shading (was passthrough) code: + */ +boolean draw_gs_init( struct draw_context *draw ); + /*** * Vertex processing (was passthrough) code: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: allocate primitives
Module: Mesa Branch: arb_geometry_shader4 Commit: be2e807f8113c8b491d84755847c86fc9c8a51c3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=be2e807f8113c8b491d84755847c86fc9c8a51c3 Author: Zack Rusin Date: Tue Jul 14 00:26:59 2009 -0400 gs: allocate primitives --- src/gallium/auxiliary/draw/draw_gs.c |6 ++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index a51cae9..7ee5978 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -37,6 +37,8 @@ #include "util/u_memory.h" #define MAX_PRIM_VERTICES 6 +/* fixme: move it from here */ +#define MAX_PRIMITIVES 128 boolean draw_gs_init( struct draw_context *draw ) @@ -53,6 +55,10 @@ draw_gs_init( struct draw_context *draw ) if (!draw->gs.machine.Outputs) return FALSE; + draw->gs.machine.Primitives = align_malloc(MAX_PRIMITIVES * sizeof(struct tgsi_exec_vector), 16); + if (!draw->gs.machine.Primitives) + return FALSE; + return TRUE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: semi work (at least don't crash)
Module: Mesa Branch: arb_geometry_shader4 Commit: 718b7ae756d2084036d563ad216df7236de4d01d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=718b7ae756d2084036d563ad216df7236de4d01d Author: Zack Rusin Date: Tue Jul 14 11:45:51 2009 -0400 gs: semi work (at least don't crash) the primitive assembly is busted though --- src/gallium/auxiliary/draw/draw_gs.c | 13 ++--- 1 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 7ee5978..9132ded 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -151,20 +151,19 @@ void draw_geometry_shader_run(struct draw_geometry_shader *shader, struct tgsi_exec_machine *machine = shader->machine; unsigned int i, j, k; unsigned slot; - int num_vertices = num_vertices_for_prim(shader->state.input_type); + unsigned num_vertices = num_vertices_for_prim(shader->state.input_type); + unsigned num_primitives = count/num_vertices; machine->Consts = constants; - for (i = 0; i < count; i += MAX_TGSI_PRIMITIVES) { - unsigned int max_primitives = MIN2(MAX_TGSI_PRIMITIVES, count - i); + for (i = 0; i < num_primitives; i += MAX_TGSI_PRIMITIVES) { + unsigned int max_primitives = MIN2(MAX_TGSI_PRIMITIVES, num_primitives - i); - /* Swizzle inputs. - */ for (k = 0; k < max_primitives; ++k) { for (j = 0; j < num_vertices; j++) { int idx = (k * num_vertices + j) * shader->info.num_inputs; -#if 0 -debug_printf("%d) Input vert:\n", i + j); +#if 1 +debug_printf("%d) Prim, %d) Input vert:\n", i, idx); for (slot = 0; slot < shader->info.num_inputs; slot++) { debug_printf("\t%d: %f %f %f %f\n", slot, input[idx + slot][0], ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (arb_geometry_shader4): gs: add geometry shader semantics
Module: Mesa Branch: arb_geometry_shader4 Commit: a6dead44a1a880ad0deaf861fbec7f7389e9ed64 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6dead44a1a880ad0deaf861fbec7f7389e9ed64 Author: Zack Rusin Date: Wed Jul 15 23:33:43 2009 -0400 gs: add geometry shader semantics --- src/gallium/auxiliary/draw/draw_gs.c |2 +- src/gallium/auxiliary/tgsi/tgsi_dump.c |4 +++- src/gallium/include/pipe/p_shader_tokens.h | 20 +++- src/mesa/state_tracker/st_program.c| 12 +++- 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/gallium/auxiliary/draw/draw_gs.c b/src/gallium/auxiliary/draw/draw_gs.c index 9132ded..bdef375 100644 --- a/src/gallium/auxiliary/draw/draw_gs.c +++ b/src/gallium/auxiliary/draw/draw_gs.c @@ -161,7 +161,7 @@ void draw_geometry_shader_run(struct draw_geometry_shader *shader, for (k = 0; k < max_primitives; ++k) { for (j = 0; j < num_vertices; j++) { -int idx = (k * num_vertices + j) * shader->info.num_inputs; +int idx = ((i + k) * num_vertices + j) * shader->info.num_inputs; #if 1 debug_printf("%d) Prim, %d) Input vert:\n", i, idx); for (slot = 0; slot < shader->info.num_inputs; slot++) { diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c index a6994ec..76201de 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c @@ -110,7 +110,9 @@ static const char *semantic_names[] = "PSIZE", "GENERIC", "NORMAL", - "FACE" + "FACE", + "VERTICES_IN", + "PRIM_ID" }; static const char *immediate_type_names[] = diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index b00cfe3..c374c5b 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -124,15 +124,17 @@ struct tgsi_declaration_range unsigned Last: 16; /**< UINT */ }; -#define TGSI_SEMANTIC_POSITION 0 -#define TGSI_SEMANTIC_COLOR1 -#define TGSI_SEMANTIC_BCOLOR 2 /**< back-face color */ -#define TGSI_SEMANTIC_FOG 3 -#define TGSI_SEMANTIC_PSIZE4 -#define TGSI_SEMANTIC_GENERIC 5 -#define TGSI_SEMANTIC_NORMAL 6 -#define TGSI_SEMANTIC_FACE 7 -#define TGSI_SEMANTIC_COUNT8 /**< number of semantic values */ +#define TGSI_SEMANTIC_POSITION 0 +#define TGSI_SEMANTIC_COLOR 1 +#define TGSI_SEMANTIC_BCOLOR2 /**< back-face color */ +#define TGSI_SEMANTIC_FOG 3 +#define TGSI_SEMANTIC_PSIZE 4 +#define TGSI_SEMANTIC_GENERIC 5 +#define TGSI_SEMANTIC_NORMAL6 +#define TGSI_SEMANTIC_FACE 7 +#define TGSI_SEMANTIC_VERTICES 8 +#define TGSI_SEMANTIC_PRIMID9 +#define TGSI_SEMANTIC_COUNT10 /**< number of semantic values */ struct tgsi_declaration_semantic { diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 27862cd..720e257 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -647,6 +647,16 @@ st_translate_geometry_program(struct st_context *st, gs_num_inputs++; switch (attr) { + case GEOM_ATTRIB_VERTICES: +stgp->input_semantic_name[slot] = TGSI_SEMANTIC_VERTICES; +stgp->input_semantic_index[slot] = 0; +interpMode[slot] = TGSI_INTERPOLATE_CONSTANT; +break; + case GEOM_ATTRIB_PRIMITIVE_ID: +stgp->input_semantic_name[slot] = TGSI_SEMANTIC_PRIMID; +stgp->input_semantic_index[slot] = 0; +interpMode[slot] = TGSI_INTERPOLATE_CONSTANT; +break; case GEOM_ATTRIB_POSITION: stgp->input_semantic_name[slot] = TGSI_SEMANTIC_POSITION; stgp->input_semantic_index[slot] = 0; @@ -672,7 +682,7 @@ st_translate_geometry_program(struct st_context *st, stgp->input_semantic_index[slot] = num_generic++; interpMode[slot] = TGSI_INTERPOLATE_PERSPECTIVE; break; - case FRAG_ATTRIB_VAR0: + case GEOM_ATTRIB_VAR0: /* fall-through */ default: stgp->input_semantic_name[slot] = TGSI_SEMANTIC_GENERIC; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit