<div dir="ltr"><div>Hi<br><br>Interesting test, it requires a lot of RAM.<br><br>On my laptop, I get (with my wip qemu virgl-thread, using spice local display):<br>- ~430 native<br>- ~250 with vtest<br>- ~250 with guest&qemu and 4G<br>- ~100 with guest&qemu and 2G<br><br>It seems to me if we could still optimize the CPU usage, and somehow do double-buffering (keep rendering while displaying), we could get even better results.<br><br>To run the test with vtest, I had to workaround an assert, that I don't know how to fix properly:<br>diff --git a/src/gallium/drivers/virgl/virgl_context.c b/src/gallium/drivers/virgl/virgl_context.c<br>index 9007583..4e9daa5 100644<br>--- a/src/gallium/drivers/virgl/virgl_context.c<br>+++ b/src/gallium/drivers/virgl/virgl_context.c<br>@@ -108,8 +108,9 @@ static void virgl_attach_res_sampler_views(struct virgl_context *vctx,<br>    unsigned i;<br>    while (remaining_mask) {<br>       i = u_bit_scan(&remaining_mask);<br>+      if (!tinfo->views[i])<br>+         continue;<br>       assert(tinfo->views[i]);<br><br><br>I have random similar crash in the guest too (quite unpredictable):<br><br>Thread 1 "heaven_x64" received signal SIGSEGV, Segmentation fault.<br>0x00007f83893cc3de in virgl_attach_res_sampler_views (vctx=vctx@entry=0x1c22c00, shader_type=shader_type@entry=1) at virgl_context.c:113<br>113          res = virgl_resource(tinfo->views[i]->base.texture);<br>(gdb) bt<br>#0  0x00007f83893cc3de in virgl_attach_res_sampler_views (vctx=vctx@entry=0x1c22c00, shader_type=shader_type@entry=1) at virgl_context.c:113<br>#1  0x00007f83893cc703 in virgl_reemit_res (vctx=0x1c22c00) at virgl_context.c:182<br>#2  virgl_flush_eq (ctx=ctx@entry=0x1c22c00, closure=0x1c22c00) at virgl_context.c:637<br>#3  0x00007f83893ccbf8 in virgl_flush_from_st (ctx=0x1c22c00, fence=<optimized out>, flags=<optimized out>) at virgl_context.c:659<br>#4  0x00007f83893cd6b0 in virgl_encoder_write_cmd_dword (ctx=ctx@entry=0x1c22c00, dword=dword@entry=67075) at virgl_encode.c:43<br>#5  0x00007f83893cd76b in virgl_encode_delete_object (ctx=0x1c22c00, handle=1306480, object=object@entry=6) at virgl_encode.c:72<br>#6  0x00007f83893ccc81 in virgl_destroy_sampler_view (ctx=<optimized out>, view=0x7aca1b0) at virgl_context.c:741<br>#7  0x00007f83893cca17 in pipe_sampler_view_reference (view=0x0, ptr=0x1c22fc8) at ../../../../src/gallium/auxiliary/util/u_inlines.h:151<br>#8  virgl_set_sampler_views (ctx=0x1c22c00, shader_type=1, start_slot=<optimized out>, num_views=<optimized out>, views=<optimized out>) at virgl_context.c:724<br>#9  0x00007f8388fffd68 in cso_set_sampler_views (ctx=0x1ca2ee0, shader_stage=<optimized out>, count=9, views=<optimized out>) at cso_cache/cso_context.c:1301<br>#10 0x00007f8388e670c1 in update_textures (st=<optimized out>, mesa_shader=<optimized out>, prog=<optimized out>, max_units=16, sampler_views=0x1c8c140, num_textures=0x1c8c644) at state_tracker/st_atom_texture.c:465<br>#11 0x00007f8388e6296d in st_validate_state (st=st@entry=0x1c8a710, pipeline=pipeline@entry=ST_PIPELINE_RENDER) at state_tracker/st_atom.c:289<br>#12 0x00007f8388e8343b in st_draw_vbo (ctx=0x1c50600, prims=0x7ffe99b5a580, nr_prims=1, ib=0x7ffe99b5a560, index_bounds_valid=<optimized out>, min_index=<optimized out>, max_index=<optimized out>, tfb_vertcount=0x0, stream=0, <br>    indirect=0x0) at state_tracker/st_draw.c:176<br>#13 0x00007f8388e44d34 in vbo_validated_drawrangeelements (ctx=ctx@entry=0x1c50600, mode=mode@entry=4, index_bounds_valid=index_bounds_valid@entry=0 '\000', start=start@entry=4294967295, end=end@entry=4294967295, count=count@entry=2688, <br>    type=5123, indices=0x0, basevertex=0, numInstances=1, baseInstance=0) at vbo/vbo_exec_array.c:849<br>#14 0x00007f8388e44db5 in vbo_exec_DrawElementsInstanced (mode=4, count=2688, type=5123, indices=0x0, numInstances=1) at vbo/vbo_exec_array.c:1030<br><br><br></div><br></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Sep 7, 2016 at 10:49 PM <<a href="mailto:marcandre.lureau@redhat.com">marcandre.lureau@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Marc-André Lureau <<a href="mailto:marcandre.lureau@redhat.com" target="_blank">marcandre.lureau@redhat.com</a>><br>
<br>
The benchmark fails to start, the translation of gl_Identity is incorrect,<br>
<br>
UMAD TEMP[0], SV[0].xxxx, TEMP[0].xxxx, TEMP[1]<br>
<br>
is translated to:<br>
<br>
temp0[0] = vec4(uintBitsToFloat((gl_InstanceID * floatBitsToUint(temp0[0].xxxx) + floatBitsToUint(temp0[1]))));<br>
<br>
Which results in the following error:<br>
shader failed to compile<br>
0:23(34): error: could not implicitly convert operands to arithmetic operator<br>
0:23(34): error: operands to arithmetic operators must be numeric<br>
0:23(17): error: no matching function for call to `uintBitsToFloat(error)'; candidates are:<br>
<br>
It seems we can use the same workaround as gl_VertexID, I didn't<br>
observe any regression running various gl_InstanceId tests from<br>
piglit:<br>
<br>
temp0[0] = vec4(uintBitsToFloat((floatBitsToUint(vec4(intBitsToFloat(gl_InstanceID))) * floatBitsToUint(temp0[0].xxxx) + floatBitsToUint(temp0[1]))));<br>
<br>
Signed-off-by: Marc-André Lureau <<a href="mailto:marcandre.lureau@redhat.com" target="_blank">marcandre.lureau@redhat.com</a>><br>
---<br>
 src/vrend_shader.c | 2 +-<br>
 1 file changed, 1 insertion(+), 1 deletion(-)<br>
<br>
diff --git a/src/vrend_shader.c b/src/vrend_shader.c<br>
index 0350b12..a80c3f1 100644<br>
--- a/src/vrend_shader.c<br>
+++ b/src/vrend_shader.c<br>
@@ -1632,7 +1632,7 @@ iter_instruction(struct tgsi_iterate_context *iter,<br>
       } else if (src->Register.File == TGSI_FILE_SYSTEM_VALUE) {<br>
          for (j = 0; j < ctx->num_system_values; j++)<br>
             if (ctx->system_values[j].first == src->Register.Index) {<br>
-               if (ctx->system_values[j].name == TGSI_SEMANTIC_VERTEXID)<br>
+               if (ctx->system_values[j].name == TGSI_SEMANTIC_VERTEXID || ctx->system_values[j].name == TGSI_SEMANTIC_INSTANCEID)<br>
                   snprintf(srcs[i], 255, "%s(vec4(intBitsToFloat(%s)))", stypeprefix, ctx->system_values[j].glsl_name);<br>
                else<br>
                   snprintf(srcs[i], 255, "%s%s", prefix, ctx->system_values[j].glsl_name);<br>
--<br>
2.10.0<br>
<br>
_______________________________________________<br>
virglrenderer-devel mailing list<br>
<a href="mailto:virglrenderer-devel@lists.freedesktop.org" target="_blank">virglrenderer-devel@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/virglrenderer-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/virglrenderer-devel</a><br>
</blockquote></div><div dir="ltr">-- <br></div><div data-smartmail="gmail_signature"><div dir="ltr">Marc-André Lureau<br></div></div>