Some systems lack the helper, so ship a local copy of it.
Pulled from Mesa, just like many other parts of virgl.
Fixes: 6564d1395c ("virglrenderer: enable symbol visiblity.")
Review-by: Jakob Bornecrantz <jakob@collabora.com>
Reported-by: Elie Tournier <elie.tournier@collabora.com>
Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.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>
For some reason it is not possible to create a normal EGL context when
a mesa software renderer is used as a backend, and hence the unit tests
will all fail. Make it possible to force a surfaceless EGL context by
specifying the environment variable
VRENDTEST_USE_EGL_SURFACELESS=1
Reviewed-by: Jakob Bornecrantz <jakob@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>
With the main aim of making vtest's usage of virglrenderer more similar
to that of QEMU, this patch sets a backing store to each resource and
reads from or writes to at each transfer operation.
v2: - Instead of adding a callback on resource destruction, free the
iovec when we unref a resource as we know that we won't be doing
anything else with it. (Dave Airlie)
v3: - Store pointers to iovecs in the global to also release them
v4: - Add new commands for resource creation and transfers, to be used
when protocol version >= 1.
v5: - Replaced the global array of iovecs with a hash table because some
es31 tests create thousands of resources and reach any sane limit.
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit negotiates a common protocol version with the clients,
allowing for backwards compatibility on both sides.
v2: - Negotiate the version in a new command, so the client can probe
for its existence and stay compatible with older servers. (Dave
Airlie)
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
As we don't have yet a proper way of negotiating a common protocol
version to use between clients and the server, we introduce a command
without reply arguments that allows us to figure out if the server is
new enough to handle negotiation of the protocol version.
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Dave Airlie <airlied@redhat.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>
Make sure the next renderer is a cleaned up one.
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
The enhanced layout extension allows for gaps in the streamout bindings
so we have to be able to handle no-handles in the middle of the target array.
TGSI also has to deal with components outputs where multiple outputs
can be mentioned in the TGSI. It's safe for use to just skip the
extra outputs at least for the tests I've been able to run.
Once we have those changes in place, the renderer can expose the
new CAP bit to the host without any further host extension checks.
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Alpha-textures are supported on GLES, unlike on OpenGL core profiles. So
we need to check for the difference here, otherwise we get textures
uploaded as alpha-textures, and then attempted swizzled as if they were
emulated as red-textures.
This fixes the following dEQP test-cases:
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.nearest_size_pot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.nearest_size_npot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.linear_size_pot
dEQP-GLES31.functional.texture.border_clamp.formats.alpha.linear_size_npot
dEQP-GLES31.functional.texture.border_clamp.unused_channels.alpha
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
With this change the extansion is recognized and KHR_robustness exposed
in the guest.
v2: remove debug_printfs (Erik)
Closes: #9
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
The extension is already included in this GLSL version and adding it results
in compilation failures.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Also add OES_sample_shading to the test.
Fixes:
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba16i_rgba16f
dEQP-GLES31.functional.image_load_store.2d.format_reinterpret.rgba32i_rgba32f
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.r32ui_r32f
dEQP-GLES31.functional.image_load_store.3d.format_reinterpret.rgba16ui_rgba16f
dEQP-GLES31.functional.image_load_store.cube.format_reinterpret.r32ui_r32f
Enabled (with some failures):
dEQP-GLES31.functional.debug.negative_coverage.*
dEQP-GLES31.functional.sample_shading.* (with some failures)
dEQP-GLES31.functional.shaders.sample_variables.*
dEQP-GLES31.functional.shaders.multisample_interpolation.*
Closes: #3
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
OES_geometry_shader and ARB_gpu_shader5 are enabled by gallium (also)
based on the GLSL level, but nothing else seems to be dependend on this
specific value, so set it. This also make the check for feat_tessellation
for enabling PIPE_PRIM_PATCH redundant.
Enables amonst others:
dEQP-GLES31.functional.texture.gather.offsets.*
dEQP-GLES31.functional.tessellation*
dEQP-GLES31.functional.geometry_shading.*
dEQP-GLES31.functional.shaders.opaque_type_indexing.*
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
In 47387e4 (emit precise keyword), I added code to try to declare
outputs as 'precise' if an instruction flagged as precise wrote to it.
Turns out, redeclaring built-ins as 'precise' isn't allowed, so that bit
was a mistake. And because mesa transforms "invariant" into instructions
with the precise-flag set, we can end up writing to built-ins with the
precise-flag, leading to shaders that doesn't compile correctly.
So let's remove the code that emits the precise-keyword when re-declaring
built-ins.
This fixes a regression in dEQP-GLES2.functional.shaders.algorithm.hsl_to_rgb_vertex
when ran right after dEQP-GLES2.functional.shaders.invariance.highp.subexpression_precision_lowp.
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>