The following leaks can be triggered by running this test series:
dEQP-GLES31.functional.tessellation_geometry_interaction.feedback.*
Direct leak of 56 byte(s) in 8 object(s) allocated from:
in __interceptor_strdup (/usr/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/
libasan.so+0x761c8)
in emit_so_movs ../../../../virgl-gitlab/src/vrend_shader.c:1623
in iter_instruction ../../../../virgl-gitlab/src/vrend_shader.c:3873
in tgsi_iterate_shader ../../../../../../virgl-gitlab/src/gallium/
auxiliary/tgsi/tgsi_iterate.c:53
in vrend_convert_shader ../../../../virgl-gitlab/src/vrend_shader.c:
5131
...
Direct leak of 56 byte(s) in 7 object(s) allocated from:
in __interceptor_calloc (/usr/lib64/gcc/x86_64-pc-linux-gnu/7.3.0/libasan.so+0xdba68)
in vrend_convert_shader ../../../../virgl-gitlab/src/vrend_shader.c:5109
in vrend_shader_create ../../../../virgl-gitlab/src/vrend_renderer.c:2906
in vrend_shader_select ../../../../virgl-gitlab/src/vrend_renderer.c:2958
...
Closes: #55
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
It is nice to know why things go wrong.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Functionality of the extension is used to create the context.
Closes: #37
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
The define EGL_MESA_drm_image is always set by the required version of
libepoxy, and since the availability of the extension EGL_MESA_drm_image
is driver dependend the run-time test in virgl_egl_init is sufficient.
Thanks to Emil Velikov for giving me the heads up about this EGL extension
stuff.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
The availability of this extension is already checked at run-time and the
requirement on the libepoxy version insures that the relevant prototypes
are available.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
v2: remove biotcount check since it is always >0 (Dave)
Closes: #58
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Add an 'all' flag to enable all logging (but don't include logging
initialted by the guest in this flag)
Logging can only enabled in debug builds and the logging parameters are
set by the environment variable VREND_DEBUG
Closes: #30
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
For this to work to host will have to add "guestallow" to the
debug flags.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Two flags are added: one to trace the features that are identified
as supported on the host, and another one that is then used to trace
the use of features. The latter one is only enabled after the
inititalization phase to avoid that the tests used for setting the caps
clobber the log.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Add flag blit and copy to add logging for the resource copy and blit path.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Add flags cmd and obj to allow logging of the commands send by the guest
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Add flags tgsi,glsl,stream, and shader and change the corresponding
logging code.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
No real flags are defined, only the macros and functions.
VREND_DEBUG(flag, ctx, ...) translates to fprintf(stderr, ...)
that is enabled based on whether logging is enabled for flag
in context ctx
VREND_DEBUG_EXT(flag, ctx, X) can be used to add code sequenses
as X, e.g. specific logging calls like for streams.
v2: Make use of variadic macros to make the VREND_DEBUG macro more
like a call to *printf (Following a suggestion by Gurchetan)
v3: Already include debug header in vrend_renderer.c
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
To avoid clobbering the log some feature test are moved so that they are
only done if the feature is really required.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
This change makes it simpler to log features that are tested for
and used.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
It is not necessary to emit both statements, and on a GLES 3.1 host that doesn't
support ARB_gpu_shader5 this actually breaks some shaders.
Fixes: 36c919e139
shader: rework precise-emitting for built-ins
Fixes on the softpipe host driver:
dEQP-GLES3.functional.shaders.qualification_order.variables.
valid.invariant_interp_storage
valid.invariant_interp_storage_precision
valid.invariant_storage
valid.invariant_storage_precision
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
A texture is non-multisample when the nr_samples == 0, for the value 1
fake multisampling is assumed and a GL_TEXTURE_2D_MULTISAMPLE should be
created.
Closes: #44
Fixes dEQP tests that pass on the host when run with softpipe:
dEQP-GLES31.functional.shaders.builtin_functions.texture_size.
samples_1_texture_2d
samples_1_texture_2d_array Pass -> Fail
samples_1_texture_int_2d Pass -> Fail
samples_1_texture_int_2d_array Pass -> Fail
samples_1_texture_uint_2d Pass -> Fail
samples_1_texture_uint_2d_array Pass -> Fail
dEQP-GLES31.functional.texture.multisample.samples_1.
sample_position
use_texture_color_2d
use_texture_color_2d_array
use_texture_depth_2d
use_texture_depth_2d_array
use_texture_int_2d
use_texture_int_2d_array
use_texture_uint_2d
use_texture_uint_2d_array
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
We already use glBindFramebuffer, so let's prefer that one instead
of the dated EXT-version.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
We already use GL_FRAMEBUFFER, which is modern OpenGL and have the
same value.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Not all compressed formats can be uploaded using glTexImage2D, that
only works if the extension provides an online texture-compressor. For
instance, EXT_texture_compression_s3tc only requires an online
compressor in the desktop version.
This test isn't really a test for the presence of an online-compressor,
this code is meant to test if we can render from it. But calling
glCompressedTexImage2D requires us to provide a valid compressed
payload, which is really awkward to maintain.
So let's instead just check for extensions to decide if these formats
are renderable or not.
Also, none of these compressed formats can be rendered to, so there's
no point in even testing for that.
Combined with a commit in mesa that enables EXT_texture_compression_s3tc
on GLES 2.0, this makes these dEQP-tests go from NotSupported to Pass
on i965:
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_invalid_target
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_neg_level_cube
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_level_max_tex2d
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_level_max_cube
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_neg_offset
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_offset_allowed
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_neg_wdt_hgt
- dEQP-GLES2.functional.negative_api.texture.compressedtexsubimage2d_invalid_size
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
On one hand it is simpler on GLES, because it allows direct readback, and
on the other hand it fixes failures when EXT_texture_buffer is not available.
Also unbind the buffers after use because otherwise glReadPixel would interpret the
pixel pointer argument as offset into the buffer and would fail.
Closes: #45
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Acked-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
operations
The GLES 3.1 standard already requires support for shadow samplers,
components, and offsets, so it is not needed to specify the requirement
for the extensions.
Closes: #40
Out of the tests that pass on the softpipe host and fail when runing it
through vtest/host:gles-softpipe this fixes the failures:
dEQP-GLES31.functional.texture.gather.*
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
The define should always be true and the availability of the extension is
already checked at run-time.
Also correct the fourcc fallback code path to fullfill test expectation.
Closes: #36
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
TGSI defines TGSI_SEMANTIC_SAMPLEPOS as a 4-component vector with
Z and W set to 0. However, if we ever try to reach thez and w
compoents, we run into trouble because this is implemented as a
swizzle on gl_SamplePosition instead. And gl_SamplePosition only
has x and y.
It seems that recent versions of mesa does just this, causing
shader-compilation errors during dEQP tests.
This fixes regressions in the following tests:
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.singlesample_texture
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_texture_1
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_texture_2
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_texture_4
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_texture_8
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.singlesample_rbo
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_rbo_1
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_rbo_2
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_rbo_4
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.correctness.multisample_rbo_8
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.distribution.multisample_texture_1
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.distribution.multisample_texture_2
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.distribution.multisample_texture_4
dEQP-GLES31.functional.shaders.sample_variables.sample_pos.distribution.multisample_texture_8
dEQP-GLES31.functional.shaders.multisample_interpolation.interpolate_at_offset.at_sample_position.default_framebuffer
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
TXP implements perspective correction, and uses a 4D vector as input.
Apply the according perspective correction in the 1D case and use only
the relevant components.
Closes: #34
Signed-off-by: Dave Airlie <airlied@redhat.com>
When running a GL 2.1 program in that guest on a GLES host that uses 1D
textures then the emitted shaders must not declare 1D sampler, since they
are not supported. Instead, use 2D samplers since 1D textures are emulated
by 2D textures, and also fix the texture shader call.
Closes: #33
Signed-off-by: Dave Airlie <airlied@redhat.com>
This helps expose GL_EXT_draw_buffers_indexed in the guest when the
host is not GLES 3.2 but provides the extension.
Enables tests
dEQP-GLES31.functional.draw_buffers_indexed.random.
max_required_draw_buffers.*
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
it seems that both extensions GL_OES_gpu_shader5 and
GL_OES_shader_multisample_interpolation are required to accept this
keyword on GLSL 310 ES.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
This is a follow up change for a5bfadaab5
to fix some request with 0 length shader. This moves the check from the
decode phase into create_shader as userspace may send 0
length shader in a long shader request.
TEST=webglaquarium
TEST=piglit opengl -t glsl --glsl
Reviewed-by: Dave Airlie <airlied@redhat.com>
The extension is part of GLSL 320 es, but must be enabled manually for a
gles 3.1 host. Closes: #32
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
1) We use the preprocessor flag HAVE_EPOXY_GLX_H, but never
set it.
2) WITH_GLX diverges with HAVE_EPOXY_EGL_H.
3) virgl_test_server needs to link with X11 when using a GLX
backend.
To fix this, query epoxy for GLX support and allow the user to
disable it as well.
TEST=./autogen.sh --disable-egl
Add support for TGSI's HW atomic counters, implemented here with
atomic_uint.
v2: - Fix calculation of atomic count in cmd
v3: - Add feature-checks (Dave Airlie)
v4: - Pass max-values for all stages and combined (Erik)
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This is usedful to accurately communicate the amount of SSBOs supported
to the guest-driver, so we can expose the right amount there.
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
As we use that temp to address memory files, make sure it's declared.
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
On pre-4.0 GL hosts that support tesselation this is needed, because
otherwise, when the guest issues a patch primitive mesa/gallium will
assert.
Closes: #31
Fixes:
Various piglits from texturesize/tes-texturesize*
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
In 4732489 (shader: do not redeclare built-ins as precise), I confused a
mesa shader-compiler bug with a spec problem. Turns out, redeclaring
built-ins as precise is allowed by the spec, just the same as invariant
variables. And even mesa allows this.
What mesa doesn't currently allow, is to redeclare a variable as *both*
invariant *and* precise. This problem does not extend to new
declarations, where this is already handled correctly.
So, let's avoid emitting both; it's not really needed to emit both, as
they essentially have the same effect (disable reordering), just with
some different usage-semantics. And for the cases we support, these are
effectively the same.
This fixes dEQP-GLES31.functional.tessellation.common_edge.*_precise
without breaking dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_vertex
this time.
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
When enabling/disabling GL_BLEND via vrend_blend_enable the context
cached the last state and doesn't call glEnable/glDisable if the state
didn't change. However, when gl(Enable|Disable)IndexedEXT is used with
index 0, then this vrenderer internal state is not updated even though
the corresponding GL state may be changed, and calling vrend_blend_enable
later may not update the actual OpenGL state correctly.
In order to avoid this and to simplify the setting the blend enabled state
remove the caching and always call glEnable/glDisable directly.
v2: remove caching for blend enabled/disabled (Dave)
Closes: #23
Fixes state leak with:
dEQP-GLES31.functional.draw_buffers_indexed.overwrite_common.
common_separate_blend_eq_buffer_separate_blend_eq
common_separate_blend_eq_buffer_advanced_blend_eq
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Before calling tgsi_text_translate, check the last 4 bytes of
shader contains the terminating character.
TEST=WebGLAquarium
[airlied: unfortunately some mesa userspace sends a packet
with 0 shader in it, this should be illegal but we can't
go trapping it now. just include the check for termination]
Reviewed-by: Dave Airlie <airlied@redhat.com>
When we set the srgb-decode state, we might overwrite another
incompatible usage of the same sampler object.
To avoid this, create two sampler-objects, one for the decode-state
and one for the skip-decode state.
This fixes the following dEQP-tests on GLES:
- dEQP-GLES31.functional.srgb_texture_decode.skip_decode.srgba8.conversion_gpu
- dEQP-GLES31.functional.srgb_texture_decode.skip_decode.srgba8.toggled
- dEQP-GLES31.functional.srgb_texture_decode.skip_decode.srgba8.multiple_textures
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>