When we want to pass sub contexts directly to the function to avoid
having to de-reference the context pointer all the time there are rare
cases when we need the pointer to the parent context (e.g. for error
reporting). For these cases we need to be able to get the parent context.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
An untyped resource is a virgl_resource without pipe_resource while
vrend_context works with pipe_resources exclusively. When an untyped
resource is attached, we defer the insersion into res_hash until
VIRGL_CCMD_PIPE_RESOURCE_SET_TYPE is submitted.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Gert Wollny <gert.wollny@collabora.com>
Acked-by: Gurchetan Singh <gurchetansingh@chromium.org> (protocol)
Track them with a list and a single-slot cache in vrend_context. The
cache hit rate is expected to be ~100%.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Gert Wollny <gert.wollny@collabora.com>
An untyped virgl_resource does not have a pipe_resource.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Gert Wollny <gert.wollny@collabora.com>
egl_image always wraps gbm_bo so far so this is not a real issue. But
it will change soon.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Gert Wollny <gert.wollny@collabora.com>
Make virgl_egl_image_from_dmabuf a generic helper. Add
virgl_egl_image_from_gbm_bo and virgl_egl_aux_plane_image_from_gbm_bo
that use the helper.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Gert Wollny <gert.wollny@collabora.com>
Use helper variables for some pointer derefs and query the shader ID's
only once.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
v2: rename ctx to sub_ctx (inspired by comment of Chia-I)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
This info is only used when creating the shader key, so it can reside in
the sub context.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
With that Unigine Heaven goes from around 56 FPS to 58
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
With that shaders that are used more frequently will remain at the
top of the list, and since the search in the shader program list is
linear, this should save some time.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
This gives a 6% speed improvement with Unigine Heaven
v2: remove the unlikely for dual_src, the whole statement will
be changed later (Chia-I Wu)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
if-chains can usually not be optimized very well, switch/case might be
implemented as a jump table.
v2: Add a break in bese before default (Chia-I Wu)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
This makes the code a bit easier to read and may help the complier
to avoid needless dereferencing of pointers.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
v2: add comment about that INDEX is not used (Chia-I Wu)
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Unlike out_fourcc, where the default value 0 is DRM_FORMAT_INVALID, the
default value 0 for out_modifier is DRM_FORMAT_MOD_LINEAR.
This changes nothing in practice as the only user of
virgl_renderer_execute is crosvm, and crosvm takes the
ENABLE_MINIGBM_ALLOCATION path instead.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Isaac Bosompem <mrisaacb@google.com>
Rename it to vrend_resource_alloc_texture to match
vrend_resource_alloc_buffer.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Add vrend_resource_fixup_emulated_bgra to fix up emulated bgra.
This is a refactor with no real change.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Add vrend_resource_alloc_buffer to allocate the storage for PIPE_BUFFER.
This is a refactor with no real change.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
Add vrend_resource_create helper to allocate and initialize the
vrend_resource struct.
This is a refactor with no real change.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
If GL_POINT_SPRITE mode is enabled and a texture has
GL_COORD_REPLACE enabled, the texture will apply coord_replace
to all primitive types, instead of only GL_POINTS as expected.
This change checks the prim_mode for every draw call and selects
the appropriate shader variant to enable coord_replace only when
rendering GL_POINTS primitives.
Closes: https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/188
Signed-off-by: Ryan Neph <ryanneph@google.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
We don't know what internal format the GL driver uses and we have to
glFinish and do a gbm transfer unless VREND_STORAGE_GL_IMMUTABLE is set.
This is motivated by Mesa's internal format change from GL_RGB to
GL_RGB8 for VIRGL_FORMAT_B8G8R8X8_UNORM in
5e4d69ec78.
That change caused glTexSubImage2D(..., GL_BGRA_EXT, GL_UNSIGNED_BYTE)
to be rejected by _mesa_gles_error_check_format_and_type.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
EGL_ANDROID_native_fence_sync only works on gles profiles.
Signed-off-by: Lepton Wu <lepton@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
capset 1 has version 0 and 1, and they are the same. capset 2 has
version 0, 1, and 2, and they are also the same.
Note that Mesa always asks for version 0.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabra.com>
0 is never an invalid capset id.
For an invalid capset id, we have to assume caps points to a buffer of
size 0 (what vrend_renderer_get_cap_set reports). We can't set
caps->max_version.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabra.com>
So that it can be shared by different renderers (there is only vrend
right now).
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
vrend_free_fences should free fences on both fence_list and
fence_wait_list. vrend_renderer_fini should call vrend_free_fences.
Since vrend_free_sync_thread is always called before vrend_free_fences,
we can assert(!vrend_state.sync_thread) rather than do the locking.
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
This extension is needed to get GL 4.4 in the guest when we
run on a GLES host.
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Lepton Wu <lepton@chromium.org>
This change is being done in preparation for exporting fences, so the
fences are built on EGL_ANDROID_native_fence_sync instead of on
EGL_KHR_fence_sync.
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
In the past, we only transfer texture data in "zero" context, changing
the texture binding was fine. Now the transfer could happen in the rendering
context, so we need to recover the bindings.
This fixes unitTest_WritePixelsNonTexture_Gpu in SkQP.
Signed-off-by: Lepton Wu <lepton@chromium.org>
Reviewed-by: Gert Wollny <gert.wollny@collabora.com>
When running some traces, we see the following on AMD.
file:dmabuf fault:ttm_bo_vm_fault mmap:dma_buf_mmap_internal readpage:0x0
Disable for now.
Reviewed-By: David Riley <davidriley@chromium.org>