aboutsummaryrefslogtreecommitdiff
path: root/render/gles2
AgeCommit message (Collapse)Author
2023-11-30render: Implement texture_preferred_read_formatAlexander Orzechowski
2023-11-30render/gles2: Implement texture_read_pixelsAlexander Orzechowski
Also get rid of gles2_texture.owns_texture. We only use the tex/fbo
2023-11-30render/gles2: save/restore context when creating/submitting a render passSimon Ser
This is useful for e.g. lazily blitting a texture for readback purposes while rendering.
2023-11-30render/gles2: reword wlr_gles2_texture commentsSimon Ser
These comments were a bit misleading: - "GL_TEXTURE_2D == mutable": not really, imported non-external-only DMA-BUFs would also use this target, but are not mutable. - "Only affects target == GL_TEXTURE_2D": same here. - "If imported from a wlr_buffer": not really, would be NULL if imported from a shm wlr_buffer. Adjust these comments to better reflect reality and adjust the check in gles2_texture_update_from_buffer().
2023-11-30render/gles2: Inline texture invalidationAlexander Orzechowski
Let's us share more code with the other code path
2023-11-30render/gles2: Don't attach texture as buffer addonAlexander Orzechowski
Since wlr_gles2_buffer is now managing importing for us, there is no reason for us to continue doing this.
2023-11-30render/gles2: Don't track image in textureAlexander Orzechowski
We can get it from the buffer
2023-11-30render/gles2: Don't double import dmabufAlexander Orzechowski
We can double import a dmabuf if we use it as a texture target and a render target. Instead, let's unify render targets and texture dmabuf imports to use wlr_gles2_buffer which manages the EGLImageKHR
2023-11-30render/gles2: Destroy textures firstAlexander Orzechowski
Since imported textures will be based off of gles2_buffer we have to destroy textures first or else they will have an invalid reference to the buffers they are imported from.
2023-11-30renderer/gles2: Bail rendering to external buffers when binding themAlexander Orzechowski
We can't do it while we're creating them because we'll want to use gles2 buffers for textures soon.
2023-11-30render/gles2: Lazily create buffer fboAlexander Orzechowski
2023-11-29render/gles2: check external-only flag in get_or_create_buffer()Simon Ser
If the external-only flag is set, then the EGLImage is only supported for use with GL_TEXTURE_EXTERNAL_OES texture targets. In particular, the EGLImage cannot be bound to a RBO.
2023-11-29render/gles2: Don't track has_alpha in pixel_formatAlexander Orzechowski
Why track the alpha here when we can already get that information elsewhere?
2023-11-25Cleanup wlr_matrix.h includesSimon Ser
Many files used to require wlr_matrix but no longer do.
2023-11-23util/transform: move over wl_output_transform helpersSimon Ser
These aren't really tied to wlr_output.
2023-11-22render/gles2: drop legacy rendering APISimon Ser
2023-10-31Remove unnecessary codeJiDe Zhang
Not needs set GL_DEPTH_TEST, Because when rendering to a framebuffer that has no depth buffer, depth testing always behaves as though the test is disabled, The initial value for each capability with the exception of GL_DITHER is GL_FALSE.
2023-10-03treewide: Migrate from sizeof(struct) to sizeof(*pointer) where practicalAlexander Orzechowski
2023-09-21renderer: Use wlr_render_rect_options_get_boxAlexander Orzechowski
Fixes: #3697
2023-07-12render/gles2: wrap timer setup in push_gles2_debug()Simon Ser
With this, errors should be properly wrapped in the debug scope.
2023-07-11render: constify struct wlr_buffer_pass_optionsSimon Ser
Let's not allow renderer implementations to mutate the passed in options.
2023-07-11Use wl_container_of() instead of castsSimon Ser
This slightly improves type safety. The culprits were found with: git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
2023-07-11render/gles2: drop unnecessary castSimon Ser
We can just refer to the struct field here.
2023-07-07Use struct initializers instead of memset()Simon Ser
This is a bit more type-safe.
2023-06-19render: Introduce wlr_render_texture_options.blend_modeAlexander Orzechowski
2023-06-19renderer: Introduce wlr_scale_filter_modeAlexander Orzechowski
2023-06-06render/gles2: Handle NULL timerAlexander Orzechowski
2023-06-05render/gles2: implement timer APIRose Hudson
2023-06-05add render timer APIRose Hudson
Based on five calls: wlr_render_timer_create - creates a timer which can be reused across frames on the same renderer wlr_renderer_begin_buffer_pass - now takes a timer so that backends can record when the rendering starts and finishes wlr_render_timer_get_time - should be called as late as possible so that queries can make their way back from the GPU wlr_render_timer_destroy - self-explanatory The timer is exposed as an opaque `struct wlr_render_timer` so that backends can store whatever they want in there.
2023-05-28renderer/gles2: Implement render pass interfaceAlexander Orzechowski
2023-05-28renderer/gles2: Compute texture coordinates based off of vertex positionsAlexander Orzechowski
2023-05-28renderer/gles2: Merge get_buffer and create_bufferAlexander Orzechowski
2023-05-28renderer/gles2: Interpret matrix as column major in shaderAlexander Orzechowski
Avoids us needing to transpose.
2023-05-21render/pixel-format: add support for block-based formatsSimon Ser
Some formats like sub-sampled YCbCr use a block of bytes to store the color values for more than one pixel. Update our format table to be able to handle such formats.
2023-04-12render/gles2: use byte-aligned rows for glReadPixelsManuel Stoeckl
Setting the GLESv2 parameter GL_PACK_ALIGNMENT to 1 ensures that the stride of the glReadPixels output matches the value computed in `pack_stride`. Since the default value of GL_PACK_ALIGNMENT is 4, this does not make a difference under normal use; but without this patch the stride can be incorrect; for example, with RGB565 buffers and screenshots of regions with odd width.
2023-02-02render/gles2: default to highp if availableSimon Ser
The spec [1] says that the maximum value for a mediump float is at least 2¹⁴ in section 4.5.2. However, when using a 4k resolution texture coordinates will exceed this value. This causes issues on drivers which implement mediump as a 16-bit [2]. Switch to highp. There's a twist: on GLES2, support for highp is optional. So we need to guard it with cute GL_FRAGMENT_PRECISION_HIGH ifdefs. [1]: https://registry.khronos.org/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf [2]: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21082
2023-02-02render/gles2: use correct type for shader typeSimon Ser
Doesn't matter a lot, but let's try to be consistent with the GL headers.
2022-12-01wlr_texture: Expose owning rendererAlexander Orzechowski
2022-11-15render/pixel_format: import pixel_format_info_check_stride()Simon Ser
We'll use this function from wlr_shm too. Add some assertions, use int32_t (since the wire protocol uses that, and we don't want to use 16-bit integers on exotic systems) and switch the stride check to be overflow-safe.
2022-11-15render/gles2: query glGetGraphicsResetStatusKHRSimon Ser
Call glGetGraphicsResetStatusKHR in wlr_renderer_begin to figure out when a GPU reset occurs. Destroy the renderer when this happens (the OpenGL context is defunct).
2022-11-15render: allow wlr_renderer_impl.begin to failSimon Ser
Make it return a bool to indicate success/failure. Adapt the various implementations to check errors.
2022-11-11render/texture: constify wlr_texture_update_from_buffer()Simon Ser
2022-10-28render/gles2: de-duplicate vertex shadersSimon Ser
The vertex shaders for quads and textures are identical.
2022-10-28render/gles2: move color uniform from quad.vert to quad.fragSimon Ser
We have no use for a v_color varying. We can use the uniform directly from the fragment shader without getting the vertex shader involved.
2022-10-28render/gles2: move shaders to individual filesSimon Ser
Instead of having a C file with strings for each shader, move each shader into its own file. Use a small POSIX shell script to convert the files into C strings (can't wait for C23 #embed...). The benefits from this are: - Improved readability and syntax highlighting. - Line numbers in shader compiler errors are easier to make sense of. - Consistency with the Vulkan renderer. - Shaders will become more complicated as we add color management features.
2022-10-27render/gles2: log error on shader compilation failureSimon Ser
2022-10-10render/gles2: assert that GL_OES_EGL_image_external is supportedSimon Ser
The target is set to GL_TEXTURE_EXTERNAL_OES when EGL_EXT_image_dma_buf_import_modifiers [1] returns an external_only flag. That spec states: > In order to support imports for the GL_TEXTURE_EXTERNAL_OES target, a > compatible OpenGL ES implementation supporting GL_OES_EGL_image_external > must be present. Fail hearder when a driver doesn't follow the spec instead of skipping rendering. See [2]. [1]: https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt [2]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3631#note_1584343
2022-10-04render: drop wlr_renderer_read_pixels() flagsSimon Ser
These are unused.
2022-08-18Use wl_signal_emit_mutableAlexander Orzechowski
2022-08-12render: replace wlr_texture_write_pixels with update_from_bufferSimon Ser
This lets the renderer handle the wlr_buffer directly, just like it does in texture_from_buffer. This also allows the renderer to batch the rectangle updates, and update more than the damage region if desirable (e.g. too many rects), so can be more efficient.