<html><head><style type='text/css'>p { margin: 0; }</style></head><body><div style='font-family: Times New Roman; font-size: 12pt; color: #000000'>Looks fine. Commited. Thanks.<div><br></div><div>Jose<br><br><hr id="zwchr"><blockquote style="border-left:2px solid rgb(16, 16, 255);margin-left:5px;padding-left:5px;color:#000;font-weight:normal;font-style:normal;text-decoration:none;font-family:Helvetica,Arial,sans-serif;font-size:12pt;">Indeed. This was copied from the indices version of the function, altough that version seems to do some more work to find out the true_index. The patch as it is fixes a crash when selecting objects in blender though.<div>
Please verify to make sure it's doing everything correctly since I'm still far from being&nbsp;comfortable&nbsp;with the codebase.</div><br><div class="gmail_quote">On Fri, Jul 1, 2011 at 1:57 PM, Jose Fonseca <span dir="ltr">&lt;<a href="mailto:jfonseca@vmware.com" target="_blank">jfonseca@vmware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I recall seeing this issue before, and I though we had fixed it by ensure the vertices are always padded to be multiple of four.. but I suspect it may have been for fetching indices, and not actual vertices.<br>

<br>
So it looks good, but let me investigate a bit more.<br>
<font color="#888888"><br>
Jose<br>
</font><div><div></div><div class="h5"><br>
----- Original Message -----<br>
&gt; This looks good to me -- Jose?<br>
&gt;<br>
&gt; Keith<br>
&gt;<br>
&gt; On Thu, 2011-06-30 at 03:33 +0100, Micael Dias wrote:<br>
&gt; &gt; ---<br>
&gt; &gt; &nbsp;src/gallium/auxiliary/draw/draw_llvm.c | &nbsp; 12 ++++++++++++<br>
&gt; &gt; &nbsp;1 files changed, 12 insertions(+), 0 deletions(-)<br>
&gt; &gt;<br>
&gt; &gt; diff --git a/src/gallium/auxiliary/draw/draw_llvm.c<br>
&gt; &gt; b/src/gallium/auxiliary/draw/draw_llvm.c<br>
&gt; &gt; index 56c26f5..19134f3 100644<br>
&gt; &gt; --- a/src/gallium/auxiliary/draw/draw_llvm.c<br>
&gt; &gt; +++ b/src/gallium/auxiliary/draw/draw_llvm.c<br>
&gt; &gt; @@ -1163,6 +1163,7 @@ draw_llvm_generate(struct draw_llvm *llvm,<br>
&gt; &gt; struct draw_llvm_variant *variant)<br>
&gt; &gt; &nbsp; &nbsp; struct lp_build_loop_state lp_loop;<br>
&gt; &gt; &nbsp; &nbsp; const int max_vertices = 4;<br>
&gt; &gt; &nbsp; &nbsp; LLVMValueRef outputs[PIPE_MAX_SHADER_OUTPUTS][NUM_CHANNELS];<br>
&gt; &gt; + &nbsp; LLVMValueRef fetch_max;<br>
&gt; &gt; &nbsp; &nbsp; void *code;<br>
&gt; &gt; &nbsp; &nbsp; struct lp_build_sampler_soa *sampler = 0;<br>
&gt; &gt; &nbsp; &nbsp; LLVMValueRef ret, ret_ptr;<br>
&gt; &gt; @@ -1234,6 +1235,10 @@ draw_llvm_generate(struct draw_llvm *llvm,<br>
&gt; &gt; struct draw_llvm_variant *variant)<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;draw_llvm_variant_key_samplers(&amp;variant-&gt;key),<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;context_ptr);<br>
&gt; &gt;<br>
&gt; &gt; + &nbsp; fetch_max = LLVMBuildSub(builder, count,<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lp_build_const_int32(gallivm, 1),<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"fetch_max");<br>
&gt; &gt; +<br>
&gt; &gt; &nbsp;#if DEBUG_STORE<br>
&gt; &gt; &nbsp; &nbsp; lp_build_printf(builder, "start = %d, end = %d, step = %d\n",<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start, end, step);<br>
&gt; &gt; @@ -1257,6 +1262,13 @@ draw_llvm_generate(struct draw_llvm *llvm,<br>
&gt; &gt; struct draw_llvm_variant *variant)<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;builder,<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lp_loop.counter,<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;lp_build_const_int32(gallivm, i), "");<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; LLVMValueRef fetch_ptr;<br>
&gt; &gt; +<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; /* make sure we're not out of bounds which can happen<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* if fetch_count % 4 != 0, because on the last iteration<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* a few of the 4 vertex fetches will be out of bounds */<br>
&gt; &gt; + &nbsp; &nbsp; &nbsp; &nbsp; true_index = lp_build_min(&amp;bld, true_index, fetch_max);<br>
&gt; &gt; +<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (j = 0; j &lt; draw-&gt;pt.nr_vertex_elements; ++j) {<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;struct pipe_vertex_element *velem =<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&amp;draw-&gt;pt.vertex_element[j];<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LLVMValueRef vb_index = lp_build_const_int32(gallivm,<br>
&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;velem-&gt;vertex_buffer_index);<br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Micael Dias<br>
</blockquote><br></div></div></body></html>