On GLES a multi-sample FBO region can only be blit to an non multi-sample
region if the source and the target rectangle are the same. The fallback
using GL and shaders doesn't work if a stencil buffer is involved, because
writing to a stencil buffer from a shader is usually not supported (i.e.
the extension ARB_shader_stencil_export is not available).
Implement a workaround for this case and also the case when the depth
buffer is involved by first blitting the complete multi-sample FBO to an
intermediate, non multi-sample FBO, and apply the region blit to the
actual target FBO afterwards.
Fixes:
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_color
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_depth
dEQP-GLES3.functional.fbo.invalidate.sub.unbind_blit_msaa_stencil
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_color
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_depth
dEQP-GLES3.functional.fbo.invalidate.whole.unbind_blit_msaa_stencil
v2: * Replace allocation via the formerly extracted resource allocation
funtion with allocating the texture via the newly extracted methods
to copy the texture parameters and allocate the texture.
* in the intermediate blit use the minified size that corresonds
to the layer to be copied
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Two functions are extracted from vrend_renderer_resource_create to
make it possible to allocate a texture resource without adding too much
code duplication:
vrend_renderer_resource_copy_args:
copies all required arguments from the args struct into the
already allocated resource
vrend_renderer_resource_allocate_texture:
Allocate a texture using the parameters in the given resource struct
v2: * instead of extracting the complete allocation also including buffers,
only extract the parts that copy the parameters and allocate the texture
* use latest upstream that also includes texture storage objects
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
This also exposes patches as a primitive type
v2: enable patch varyings
v3: update patch varyings value from GL API.
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This adds the so movs emission along with setting the correct
primitive in begin for tessellation shaders
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This adds all the shader program building and dirtying for
tess shaders.
The big change is building the key so that we get the correct
tess input/output blocks.
It might be possible SSO could reduce some of that overheads
v2: fixup warnings
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This adds the shader key bits, along with a bunch of the
string handling for tess shaders
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This passes the default tessellation factors from the guest to
the host.
v2: fix warnings
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This just adds a flag to say we have tessellation available
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This just cleans the code up so adding more shader types gets easier.
Tested-by: Elie Tournier <elie.tournier@collabora.com>
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This is a basic step towards GL4.0 and greater,
add support for the FP64 extension.
This requires ARB_gpu_shader5 on the host, to
implement ldexp using bitfieldInsert.
v2: drop fp64_srcs into local var
fix imul regression due to rebase
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
For dual src blending to work we have to link the shader in a certain
way, so we have to dirty the shaders on a new blend state, then
we have to make sure the dual src bit is the same before avoiding
a relink state, otherwise have to relink.
This fixes:
piglit arb_blend_func_extended-fbo-extended-blend
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
vrend_renderer.c: in function »vrend_renderer_transfer_write_iov«:
vrend_renderer.c:5145:65: warning: comparison between
signed and unsigned integer expressions [-Wsign-compare]
if (res->readback_fb_id == 0 ||
res->readback_fb_level != info->level) {
^~
vrend_renderer.c:5167:86: Warnung: signed and unsigned type in
conditional expression [-Wsign-compare]
glWindowPos2i(info->box->x, res->y_0_top ? res->base.height0 -
info->box->y : info->box->y);
vrend_renderer.c:5186:76: warning: signed and unsigned type in
conditional expression [-Wsign-compare]
y = invert ? res->base.height0 - info->box->y - info->box-
> height : info->box->y;
vrend_renderer.c: in function »vrend_transfer_send_readpixels«:
vrend_renderer.c:5394:59: warning: comparison between
signed and unsigned integer expressions [-Wsign-
compare]
if (res->readback_fb_id == 0 || res->readback_fb_level != info-
>level || res->readback_fb_z != info->box->z) {
^~
vrend_renderer.c:5394:96: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (res->readback_fb_id == 0 ||
res->readback_fb_level != info->level ||
res->readback_fb_z != info->box->z) {
^~
vrend_renderer.c:5463:18: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (imp != type) {
^~
vrend_renderer.c:5469:18: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (imp != format) {
^~
vrend_renderer.c: in function »vrend_transfer_send_readonly«:
vrend_renderer.c:5510:22: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (res->num_iovs == num_iovs) {
^~
vrend_renderer.c:5511:21: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (i = 0; i < res->num_iovs; i++) {
^
vrend_renderer.c:5502:63: Warnung: unused parameter »ctx« [-Wunused-
parameter]
static int vrend_transfer_send_readonly(struct vrend_context *ctx,
^~~
vrend_renderer.c:5505:75: Warnung: unused parameter »info« [-Wunused-
parameter]
const struct vrend_transfer_info *info)
v2: use mesa style UNUSED define for unused parameter annotation
correct language in some warning messages
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
vrend_renderer.c: in function »vrend_renderer_resource_create«:
vrend_renderer.c:4735:35: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (level = 0; level <= args->last_level; level++) {
^~
vrend_renderer.c:4745:32: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (level = 0; level <= args->last_level; level++) {
^~
vrend_renderer.c:4756:32: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (level = 0; level <= args->last_level; level++) {
^~
vrend_renderer.c:4763:32: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (level = 0; level <= args->last_level; level++) {
^~
vrend_renderer.c: in function »read_transfer_data«:
vrend_renderer.c:4893:27: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (h = 0; h < bh; h++) {
^
vrend_renderer.c: in function »write_transfer_data«:
vrend_renderer.c:4936:24: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
for (h = 0; h < bh; h++) {
^
vrend_renderer.c: in function »check_transfer_bounds«:
vrend_renderer.c:4981:28: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (info->box->depth > res->base.array_size)
^
vrend_renderer.c:4983:24: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (info->box->z > res->base.array_size)
^
vrend_renderer.c:4985:43: warning: comparison between
signed and unsigned integer expressions[-Wsign-compare]
if (info->box->z + info->box->depth > res->base.array_size)
v2: Correct language of warnings
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
vrend_renderer.c: In Funktion »set_stream_out_varyings«:
vrend_renderer.c:867:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < n_outputs; i++)
^
vrend_renderer.c: In Funktion »vrend_set_framebuffer_state«:
vrend_renderer.c:1636:38: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = ctx->sub->nr_cbufs; i < old_num; i++) {
^
vrend_renderer.c:1652:21: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < ctx->sub->nr_cbufs; i++) {
^
vrend_renderer.c: In Funktion »vrend_set_viewport_states«:
vrend_renderer.c:1707:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < num_viewports; i++) {
^
vrend_renderer.c: In Funktion »vrend_create_vertex_elements_state«:
vrend_renderer.c:1778:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < num_elements; i++) {
^
vrend_renderer.c:1844:21: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < num_elements; i++) {
^
vrend_renderer.c: In Funktion »vrend_set_constants«:
rend_renderer.c:1902:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < num_constant; i++)
^
vrend_renderer.c:1887:35: Warnung: unused parameter »index« [-Wunused-
parameter]
uint32_t index,
^~~~~
vrend_renderer.c: In Funktion »vrend_set_num_sampler_views«:
vrend_renderer.c:2118:39: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
if (start_slot + num_sampler_views < ctx->sub-
>views[shader_type].num_views) {
In this case the if-condition enclosing the for loop was removed because
it was superfluous.
v2: Use mesa-style UNUSED for unused parameters
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
vrend_renderer.c: In Funktion »vrend_hw_set_zsurf_texture«:
vrend_renderer.c:1516:65: Warnung: signed and unsigned type in
conditional expression [-Wsign-compare]
first_layer != last_layer ? 0xffffffff :
first_layer);
^
vrend_renderer.c: In Funktion »vrend_hw_set_color_surface«:
vrend_renderer.c:1535:68: Warnung: signed and unsigned type in
conditional expression [-Wsign-compare]
first_layer != last_layer ? 0xffffffff :
first_layer);
^
vrend_renderer.c: In Funktion »vrend_set_framebuffer_state«:
vrend_renderer.c:1618:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < nr_cbufs; i++) {
^
vrend_renderer.c:1666:31: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
if (ctx->sub->fb_height != new_height || ctx->sub-
>inverted_fbo_content != new_ibf) {
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
vrend_renderer.c: In Funktion »vrend_destroy_shader_selector«:
vrend_renderer.c:627:21: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < sel->sinfo.so_info.num_outputs; i++)
^
vrend_renderer.c: In Funktion »dump_stream_out«:
vrend_renderer.c:776:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < so->num_outputs; i++) {
^
vrend_renderer.c: In Funktion »set_stream_out_varyings«:
vrend_renderer.c:828:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < so->num_outputs; i++) {
^
vrend_renderer.c: In Funktion »vrend_destroy_streamout_object«:
vrend_renderer.c:1130:18: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < obj->num_targets; i++)
^
vrend_renderer.c: In Funktion »vrend_destroy_so_target_object«:
vrend_renderer.c:1200:21: Warnung: Vergleich zwischen
vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken [-Wsign-
compare]
for (i = 0; i < obj->num_targets; i++) {
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Multisample fragment operations are part of the OpenGL ES 3.0 spec and
enabling them doesn't required the extensions to be listed explicitly.
Fixes:
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_alpha_to_coverage
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage
dEQP-GLES3.functional.multisample.fbo_max_samples.proportionality_sample_coverage_inverted
dEQP-GLES3.functional.multisample.fbo_max_samples.sample_coverage_invert
on an GLES host with GLES >= 3.0.
v2: - Do not set GL_SAMPLE_ALPHA_TO_ONE state when on gles host, because it is
not supported there. This silences a number of according warnings on the
host.
v3: - Properly place if statement to not send GL_SAMPLE_ALPHA_TO_ONE.
- Do not set GL_MULTISAMPLE state when on gles host (same as above).
v4: - fix nitpicks in commit message
v5: - seperate setting of GL_MULTISAMPLE (not available on GLES) and
GL_SAMPLES_TEST
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 resources we create for gallium resources should be immutable
wrt the layout we want, so if we have the texture storage APIs
available we should use those instead of the tex image ones to
create the initial storage.
This is also a necessary precursor for texture view support.
Reviewed-by: Jakob Bornecrantz <jakob@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
This just makes sure we use the correct destruction path.
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
Virglrender holds the values in a structure vrend_sub_context that is zeroed
out when it is initialized.
So, when the first state change set the near_val and far_val to zero,
the check assumes it is the old state and doesn't call glDepthRange.
Fixes: dEQP-GLES2.functional.depth_range.write.zero_to_zero
v2: initialize far_val in vrend_renderer_create_sub_ctx (Gurchetan)
Suggested-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Elie Tournier <elie.tournier@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
On GLES >= 3.1 all the functionality that is currently relevant for
attribute binding in virglrenderer is available. However, GLES 3.1 does
not fully implement GL_ARB_vertex_attrib_binding. Therefore, rename the
flag "have_vertex_attrib_binding" to "have_gles31_vertex_attrib_binding",
and set it when the host implements GL_ARB_vertex_attrib_binding, is
GL >= 4.3 or GLES >= 3.1. As a result with these configuration the new
code path vrend_draw_bind_vertex_binding is used.
Fixes on GLES 3.1 hosts:
dEQP-GLES3.functional.clipping.point.wide_point_z_clip
dEQP-GLES3.functional.clipping.point.wide_point_z_clip_viewport_center
dEQP-GLES3.functional.clipping.point.wide_point_z_clip_viewport_corner
On an Intel Kabylake GLES 3.1 host this also fixes:
dEQP-GLES3.functional.clipping.point.wide_point_clip
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_center
dEQP-GLES3.functional.clipping.point.wide_point_clip_viewport_corner
but it should be noted that these three tests expect that also points with a
centre outside the clip volume will be partially drawn when they overlap with
the clip volume because of being "wide" (i.e. when moving towards the clip
volume boundary a wide point would "naturally" move out). The OpenGL standard
defines that points should be clipped the moment the centre is outside the
clip volume (i.e. points will "pop" in and out of the view when moving across
the border). Hence, for a host implementation following the standard to the
letter these tests should actually fail.
v2: - rename have_vertex_attrib_binding to have_gles31_vertex_attrib_binding
- clarify the commit message describing the wide point clipping problem
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>
We don't need the entire 32 bits to report the presence of TGSI
invariant support.
Suggested-by: Gert Wollny <gert.wollny@collabora.com>
Suggested-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
and make sure that on GLES it it chosen for GL_RGBA4 over
VIRGL_FORMAT_B4G4R4A4_UNORM, by removing support for the latter.
This is needed because on GLES3 GL_BGRA isn't a supported format to pass
to glTexImage3D.
Fixes the test dEQP-GLES3.functional.texture.format.sized.3d.rgba4_pot
on GLES hosts.
v2: * Make more explicit the GL/GLES split (Gert Wollny)
Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Suggested-by: Jakob Bornecrantz <jakob@collabora.com>
Reviewed-By: Gert Wollny <gert.wollny@collabora.com>
Tested-by: Jakob Bornecrantz <jakob@collabora.com>
This allows the tbo code to properly detect if we are using a buffer
as a texture or not, instead of relying on GL_TEXTURE_BUFFER being used.
We also don't need to special case generate the tbo texture id until
sampler bind time.
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
Until we support ARB_texture_buffer_range we shouldn't report
this value as mesa will enable the extension.
Reviewed-by: Elie Tournier <elie.tournier@collabora.com>
This adds support for the transform feedback vertex streams
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Warn if the expected native format/type differs from the allowed
type and format that are accepted by the OpenGL ES spec.
This is hopefully only a problem for Mesa which we have now fixed.
Other option is to add two extra copies and format conversions.
v2: More verbose and better comment.
Reviewed-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Signed-off-by: Jakob Bornecrantz <jakob@collabora.com>