(!1975) glamor: BUG_RETURN*() on pixmap private data
Usually shouldn't happen trying to accessing pixmap's glamor private data w/o having it initialized first. But just in case there's some subtle bug, adding extra checks, which don't cost us much. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
		
							parent
							
								
									9060792354
								
							
						
					
					
						commit
						a3eae0f568
					
				| 
						 | 
					@ -30,10 +30,14 @@
 | 
				
			||||||
 * This file covers the initialization and teardown of glamor, and has various
 | 
					 * This file covers the initialization and teardown of glamor, and has various
 | 
				
			||||||
 * functions not responsible for performing rendering.
 | 
					 * functions not responsible for performing rendering.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "mipict.h"
 | 
					#include "mipict.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,6 +99,7 @@ glamor_set_pixmap_type(PixmapPtr pixmap, glamor_pixmap_type_t type)
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv;
 | 
					    glamor_pixmap_private *pixmap_priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
    pixmap_priv->type = type;
 | 
					    pixmap_priv->type = type;
 | 
				
			||||||
    glamor_init_pixmap_private_small(pixmap, pixmap_priv);
 | 
					    glamor_init_pixmap_private_small(pixmap, pixmap_priv);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -110,6 +115,8 @@ glamor_set_pixmap_texture(PixmapPtr pixmap, unsigned int tex)
 | 
				
			||||||
    glamor_priv = glamor_get_screen_private(screen);
 | 
					    glamor_priv = glamor_get_screen_private(screen);
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->fbo) {
 | 
					    if (pixmap_priv->fbo) {
 | 
				
			||||||
        fbo = glamor_pixmap_detach_fbo(pixmap_priv);
 | 
					        fbo = glamor_pixmap_detach_fbo(pixmap_priv);
 | 
				
			||||||
        glamor_destroy_fbo(glamor_priv, fbo);
 | 
					        glamor_destroy_fbo(glamor_priv, fbo);
 | 
				
			||||||
| 
						 | 
					@ -141,6 +148,7 @@ glamor_clear_pixmap(PixmapPtr pixmap)
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
    pixmap_format = glamor_format_for_pixmap(pixmap);
 | 
					    pixmap_format = glamor_format_for_pixmap(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
    assert(pixmap_priv->fbo != NULL);
 | 
					    assert(pixmap_priv->fbo != NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_clear_fbo(glamor_priv, pixmap_priv->fbo, pixmap_format);
 | 
					    glamor_pixmap_clear_fbo(glamor_priv, pixmap_priv->fbo, pixmap_format);
 | 
				
			||||||
| 
						 | 
					@ -224,6 +232,7 @@ glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth,
 | 
				
			||||||
        pixmap = fbCreatePixmap(screen, 0, 0, depth, usage);
 | 
					        pixmap = fbCreatePixmap(screen, 0, 0, depth, usage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pixmap_priv->is_cbcr = (GLAMOR_CREATE_FORMAT_CBCR & usage) == GLAMOR_CREATE_FORMAT_CBCR;
 | 
					    pixmap_priv->is_cbcr = (GLAMOR_CREATE_FORMAT_CBCR & usage) == GLAMOR_CREATE_FORMAT_CBCR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -427,6 +436,8 @@ glamor_format_for_pixmap(PixmapPtr pixmap)
 | 
				
			||||||
    glamor_screen_private *glamor_priv = glamor_get_screen_private(pScreen);
 | 
					    glamor_screen_private *glamor_priv = glamor_get_screen_private(pScreen);
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->is_cbcr)
 | 
					    if (pixmap_priv->is_cbcr)
 | 
				
			||||||
        return &glamor_priv->cbcr_format;
 | 
					        return &glamor_priv->cbcr_format;
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					@ -1012,6 +1023,9 @@ _glamor_fds_from_pixmap(ScreenPtr screen, PixmapPtr pixmap, int *fds,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!glamor_priv->dri3_enabled)
 | 
					    if (!glamor_priv->dri3_enabled)
 | 
				
			||||||
        return 0;
 | 
					        return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (pixmap_priv->type) {
 | 
					    switch (pixmap_priv->type) {
 | 
				
			||||||
    case GLAMOR_TEXTURE_DRM:
 | 
					    case GLAMOR_TEXTURE_DRM:
 | 
				
			||||||
    case GLAMOR_TEXTURE_ONLY:
 | 
					    case GLAMOR_TEXTURE_ONLY:
 | 
				
			||||||
| 
						 | 
					@ -1089,6 +1103,8 @@ glamor_name_from_pixmap(PixmapPtr pixmap, CARD16 *stride, CARD32 *size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, -1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    switch (pixmap_priv->type) {
 | 
					    switch (pixmap_priv->type) {
 | 
				
			||||||
    case GLAMOR_TEXTURE_DRM:
 | 
					    case GLAMOR_TEXTURE_DRM:
 | 
				
			||||||
    case GLAMOR_TEXTURE_ONLY:
 | 
					    case GLAMOR_TEXTURE_ONLY:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,9 +19,13 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <dix-config.h>
 | 
				
			||||||
#include "Xprintf.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "Xprintf.h"
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_transform.h"
 | 
					#include "glamor_transform.h"
 | 
				
			||||||
#include "glamor_transfer.h"
 | 
					#include "glamor_transfer.h"
 | 
				
			||||||
| 
						 | 
					@ -267,6 +271,8 @@ glamor_glyphs_flush(CARD8 op, PicturePtr src, PicturePtr dst,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        glUniform1i(prog->atlas_uniform, 1);
 | 
					        glUniform1i(prog->atlas_uniform, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					        glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
            BoxPtr box = RegionRects(dst->pCompositeClip);
 | 
					            BoxPtr box = RegionRects(dst->pCompositeClip);
 | 
				
			||||||
            int nbox = RegionNumRects(dst->pCompositeClip);
 | 
					            int nbox = RegionNumRects(dst->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_transfer.h"
 | 
					#include "glamor_transfer.h"
 | 
				
			||||||
| 
						 | 
					@ -446,6 +449,8 @@ glamor_copy_fbo_fbo_draw(DrawablePtr src,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!src_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(src_priv, src_box_index) {
 | 
					    glamor_pixmap_loop(src_priv, src_box_index) {
 | 
				
			||||||
        BoxPtr src_box = glamor_pixmap_box_at(src_priv, src_box_index);
 | 
					        BoxPtr src_box = glamor_pixmap_box_at(src_priv, src_box_index);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -456,6 +461,8 @@ glamor_copy_fbo_fbo_draw(DrawablePtr src,
 | 
				
			||||||
        if (!glamor_use_program(dst, gc, prog, &args))
 | 
					        if (!glamor_use_program(dst, gc, prog, &args))
 | 
				
			||||||
            goto bail_ctx;
 | 
					            goto bail_ctx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BUG_RETURN_VAL(!dst_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        glamor_pixmap_loop(dst_priv, dst_box_index) {
 | 
					        glamor_pixmap_loop(dst_priv, dst_box_index) {
 | 
				
			||||||
            BoxRec scissor = {
 | 
					            BoxRec scissor = {
 | 
				
			||||||
                .x1 = max(-args.dx, bounds.x1),
 | 
					                .x1 = max(-args.dx, bounds.x1),
 | 
				
			||||||
| 
						 | 
					@ -701,6 +708,9 @@ glamor_copy_gl(DrawablePtr src,
 | 
				
			||||||
    glamor_pixmap_private *src_priv = glamor_get_pixmap_private(src_pixmap);
 | 
					    glamor_pixmap_private *src_priv = glamor_get_pixmap_private(src_pixmap);
 | 
				
			||||||
    glamor_pixmap_private *dst_priv = glamor_get_pixmap_private(dst_pixmap);
 | 
					    glamor_pixmap_private *dst_priv = glamor_get_pixmap_private(dst_pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!dst_priv, FALSE);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!src_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_priv)) {
 | 
					    if (GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_priv)) {
 | 
				
			||||||
        if (GLAMOR_PIXMAP_PRIV_HAS_FBO(src_priv)) {
 | 
					        if (GLAMOR_PIXMAP_PRIV_HAS_FBO(src_priv)) {
 | 
				
			||||||
            if (glamor_copy_needs_temp(src, dst, box, nbox, dx, dy))
 | 
					            if (glamor_copy_needs_temp(src, dst, box, nbox, dx, dy))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,9 +30,12 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * This file covers core X rendering in glamor.
 | 
					 * This file covers core X rendering in glamor.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Bool
 | 
					Bool
 | 
				
			||||||
| 
						 | 
					@ -41,6 +44,8 @@ glamor_get_drawable_location(const DrawablePtr drawable)
 | 
				
			||||||
    PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable);
 | 
					    PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable);
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED)
 | 
					    if (pixmap_priv->gl_fbo == GLAMOR_FBO_UNATTACHED)
 | 
				
			||||||
        return 'm';
 | 
					        return 'm';
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_program.h"
 | 
					#include "glamor_program.h"
 | 
				
			||||||
| 
						 | 
					@ -210,6 +213,8 @@ glamor_dash_loop(DrawablePtr drawable, GCPtr gc, glamor_program *prog,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
					        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
				
			||||||
        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
					        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,6 +43,7 @@
 | 
				
			||||||
#include <drm_fourcc.h>
 | 
					#include <drm_fourcc.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor/glamor_priv.h"
 | 
					#include "glamor/glamor_priv.h"
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_egl.h"
 | 
					#include "glamor_egl.h"
 | 
				
			||||||
#include "glamor_glx_provider.h"
 | 
					#include "glamor_glx_provider.h"
 | 
				
			||||||
| 
						 | 
					@ -152,6 +153,8 @@ glamor_egl_set_pixmap_image(PixmapPtr pixmap, EGLImageKHR image,
 | 
				
			||||||
        glamor_get_pixmap_private(pixmap);
 | 
					        glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
    EGLImageKHR old;
 | 
					    EGLImageKHR old;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    old = pixmap_priv->image;
 | 
					    old = pixmap_priv->image;
 | 
				
			||||||
    if (old) {
 | 
					    if (old) {
 | 
				
			||||||
        ScreenPtr                               screen = pixmap->drawable.pScreen;
 | 
					        ScreenPtr                               screen = pixmap->drawable.pScreen;
 | 
				
			||||||
| 
						 | 
					@ -261,6 +264,8 @@ glamor_make_pixmap_exportable(PixmapPtr pixmap, Bool modifiers_ok)
 | 
				
			||||||
    PixmapPtr exported;
 | 
					    PixmapPtr exported;
 | 
				
			||||||
    GCPtr scratch_gc;
 | 
					    GCPtr scratch_gc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->image &&
 | 
					    if (pixmap_priv->image &&
 | 
				
			||||||
        (modifiers_ok || !pixmap_priv->used_modifiers))
 | 
					        (modifiers_ok || !pixmap_priv->used_modifiers))
 | 
				
			||||||
        return TRUE;
 | 
					        return TRUE;
 | 
				
			||||||
| 
						 | 
					@ -363,6 +368,8 @@ glamor_gbm_bo_from_pixmap_internal(ScreenPtr screen, PixmapPtr pixmap)
 | 
				
			||||||
    struct glamor_pixmap_private *pixmap_priv =
 | 
					    struct glamor_pixmap_private *pixmap_priv =
 | 
				
			||||||
        glamor_get_pixmap_private(pixmap);
 | 
					        glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!pixmap_priv->image)
 | 
					    if (!pixmap_priv->image)
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -753,6 +760,8 @@ glamor_egl_destroy_pixmap(PixmapPtr pixmap)
 | 
				
			||||||
        struct glamor_pixmap_private *pixmap_priv =
 | 
					        struct glamor_pixmap_private *pixmap_priv =
 | 
				
			||||||
            glamor_get_pixmap_private(pixmap);
 | 
					            glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (pixmap_priv->image)
 | 
					        if (pixmap_priv->image)
 | 
				
			||||||
            eglDestroyImageKHR(glamor_egl->display, pixmap_priv->image);
 | 
					            eglDestroyImageKHR(glamor_egl->display, pixmap_priv->image);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -780,8 +789,10 @@ glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    temp_img = back_priv->image;
 | 
					    temp_img = back_priv->image;
 | 
				
			||||||
    temp_mod = back_priv->used_modifiers;
 | 
					    temp_mod = back_priv->used_modifiers;
 | 
				
			||||||
 | 
					    BUG_RETURN(!back_priv);
 | 
				
			||||||
    back_priv->image = front_priv->image;
 | 
					    back_priv->image = front_priv->image;
 | 
				
			||||||
    back_priv->used_modifiers = front_priv->used_modifiers;
 | 
					    back_priv->used_modifiers = front_priv->used_modifiers;
 | 
				
			||||||
 | 
					    BUG_RETURN(!front_priv);
 | 
				
			||||||
    front_priv->image = temp_img;
 | 
					    front_priv->image = temp_img;
 | 
				
			||||||
    front_priv->used_modifiers = temp_mod;
 | 
					    front_priv->used_modifiers = temp_mod;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -800,7 +811,9 @@ glamor_egl_close_screen(ScreenPtr screen)
 | 
				
			||||||
    scrn = xf86ScreenToScrn(screen);
 | 
					    scrn = xf86ScreenToScrn(screen);
 | 
				
			||||||
    glamor_egl = glamor_egl_get_screen_private(scrn);
 | 
					    glamor_egl = glamor_egl_get_screen_private(scrn);
 | 
				
			||||||
    screen_pixmap = screen->GetScreenPixmap(screen);
 | 
					    screen_pixmap = screen->GetScreenPixmap(screen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(screen_pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(screen_pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    eglDestroyImageKHR(glamor_egl->display, pixmap_priv->image);
 | 
					    eglDestroyImageKHR(glamor_egl->display, pixmap_priv->image);
 | 
				
			||||||
    pixmap_priv->image = NULL;
 | 
					    pixmap_priv->image = NULL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,10 +25,13 @@
 | 
				
			||||||
 *    Zhigang Gong <zhigang.gong@gmail.com>
 | 
					 *    Zhigang Gong <zhigang.gong@gmail.com>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor/glamor_priv.h"
 | 
					#include "glamor/glamor_priv.h"
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
glamor_destroy_fbo(glamor_screen_private *glamor_priv,
 | 
					glamor_destroy_fbo(glamor_screen_private *glamor_priv,
 | 
				
			||||||
| 
						 | 
					@ -283,6 +286,7 @@ glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo)
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv;
 | 
					    glamor_pixmap_private *pixmap_priv;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->fbo)
 | 
					    if (pixmap_priv->fbo)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
| 
						 | 
					@ -309,6 +313,7 @@ glamor_pixmap_destroy_fbo(PixmapPtr pixmap)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (glamor_pixmap_priv_is_large(priv)) {
 | 
					    if (glamor_pixmap_priv_is_large(priv)) {
 | 
				
			||||||
        int i;
 | 
					        int i;
 | 
				
			||||||
 | 
					        BUG_RETURN(!priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (i = 0; i < priv->block_wcnt * priv->block_hcnt; i++)
 | 
					        for (i = 0; i < priv->block_wcnt * priv->block_hcnt; i++)
 | 
				
			||||||
            glamor_destroy_fbo(glamor_priv, priv->fbo_array[i]);
 | 
					            glamor_destroy_fbo(glamor_priv, priv->fbo_array[i]);
 | 
				
			||||||
| 
						 | 
					@ -331,6 +336,9 @@ glamor_pixmap_ensure_fbo(PixmapPtr pixmap, int flag)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen);
 | 
					    glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen);
 | 
				
			||||||
    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (pixmap_priv->fbo == NULL) {
 | 
					    if (pixmap_priv->fbo == NULL) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        fbo = glamor_create_fbo(glamor_priv, pixmap, pixmap->drawable.width,
 | 
					        fbo = glamor_create_fbo(glamor_priv, pixmap, pixmap->drawable.width,
 | 
				
			||||||
| 
						 | 
					@ -363,6 +371,8 @@ glamor_pixmap_exchange_fbos(PixmapPtr front, PixmapPtr back)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    front_priv = glamor_get_pixmap_private(front);
 | 
					    front_priv = glamor_get_pixmap_private(front);
 | 
				
			||||||
    back_priv = glamor_get_pixmap_private(back);
 | 
					    back_priv = glamor_get_pixmap_private(back);
 | 
				
			||||||
 | 
					    BUG_RETURN(!front_priv);
 | 
				
			||||||
 | 
					    BUG_RETURN(!back_priv);
 | 
				
			||||||
    temp_fbo = front_priv->fbo;
 | 
					    temp_fbo = front_priv->fbo;
 | 
				
			||||||
    front_priv->fbo = back_priv->fbo;
 | 
					    front_priv->fbo = back_priv->fbo;
 | 
				
			||||||
    back_priv->fbo = temp_fbo;
 | 
					    back_priv->fbo = temp_fbo;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,9 @@
 | 
				
			||||||
 *    Zhigang Gong <zhigang.gong@gmail.com>
 | 
					 *    Zhigang Gong <zhigang.gong@gmail.com>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include <dixfontstr.h>
 | 
					#include <dixfontstr.h>
 | 
				
			||||||
| 
						 | 
					@ -69,6 +72,8 @@ glamor_poly_glyph_blt_gl(DrawablePtr drawable, GCPtr gc,
 | 
				
			||||||
    start_x += drawable->x;
 | 
					    start_x += drawable->x;
 | 
				
			||||||
    y += drawable->y;
 | 
					    y += drawable->y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        int x;
 | 
					        int x;
 | 
				
			||||||
        int n;
 | 
					        int n;
 | 
				
			||||||
| 
						 | 
					@ -233,6 +238,8 @@ glamor_push_pixels_gl(GCPtr gc, PixmapPtr bitmap,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_put_vbo_space(screen);
 | 
					    glamor_put_vbo_space(screen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        if (!glamor_set_destination_drawable(drawable, box_index, FALSE, TRUE,
 | 
					        if (!glamor_set_destination_drawable(drawable, box_index, FALSE, TRUE,
 | 
				
			||||||
                                             prog->matrix_uniform, NULL, NULL))
 | 
					                                             prog->matrix_uniform, NULL, NULL))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,11 @@
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include <stdint.h> /* For INT16_MAX */
 | 
					#include <stdint.h> /* For INT16_MAX */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
| 
						 | 
					@ -190,6 +195,7 @@ glamor_compute_clipped_regions_ext(PixmapPtr pixmap,
 | 
				
			||||||
        small_box.y2 = block_h;
 | 
					        small_box.y2 = block_h;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else {
 | 
					    else {
 | 
				
			||||||
 | 
					        BUG_RETURN_VAL(!pixmap_priv, NULL);
 | 
				
			||||||
        glamor_pixmap_private *priv = __glamor_large(pixmap_priv);
 | 
					        glamor_pixmap_private *priv = __glamor_large(pixmap_priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        clipped_regions = __glamor_compute_clipped_regions(priv->block_w,
 | 
					        clipped_regions = __glamor_compute_clipped_regions(priv->block_w,
 | 
				
			||||||
| 
						 | 
					@ -1171,7 +1177,8 @@ glamor_composite_largepixmap_region(CARD8 op,
 | 
				
			||||||
        && glamor_pixmap_priv_is_large(source_pixmap_priv)) {
 | 
					        && glamor_pixmap_priv_is_large(source_pixmap_priv)) {
 | 
				
			||||||
        /* XXX self-copy... */
 | 
					        /* XXX self-copy... */
 | 
				
			||||||
        need_free_source_pixmap_priv = source_pixmap_priv;
 | 
					        need_free_source_pixmap_priv = source_pixmap_priv;
 | 
				
			||||||
        source_pixmap_priv = malloc(sizeof(*source_pixmap_priv));
 | 
					        source_pixmap_priv = calloc(1, sizeof(*source_pixmap_priv));
 | 
				
			||||||
 | 
					        BUG_RETURN_VAL(!source_pixmap_priv, FALSE);
 | 
				
			||||||
        *source_pixmap_priv = *need_free_source_pixmap_priv;
 | 
					        *source_pixmap_priv = *need_free_source_pixmap_priv;
 | 
				
			||||||
        need_free_source_pixmap_priv = source_pixmap_priv;
 | 
					        need_free_source_pixmap_priv = source_pixmap_priv;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_program.h"
 | 
					#include "glamor_program.h"
 | 
				
			||||||
| 
						 | 
					@ -100,6 +103,8 @@ glamor_poly_lines_solid_gl(DrawablePtr drawable, GCPtr gc,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
					        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
				
			||||||
        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
					        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,7 +35,9 @@
 | 
				
			||||||
 * back to software (readback is more expensive than the upload we do
 | 
					 * back to software (readback is more expensive than the upload we do
 | 
				
			||||||
 * here, and you'd have to re-upload the fallback output anyway).
 | 
					 * here, and you'd have to re-upload the fallback output anyway).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
| 
						 | 
					@ -286,6 +288,7 @@ glamor_upload_picture_to_texture(PicturePtr picture)
 | 
				
			||||||
    const struct glamor_format *f = glamor_format_for_pixmap(pixmap);
 | 
					    const struct glamor_format *f = glamor_format_for_pixmap(pixmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert(glamor_pixmap_is_memory(pixmap));
 | 
					    assert(glamor_pixmap_is_memory(pixmap));
 | 
				
			||||||
 | 
					    assert(pixmap_priv);
 | 
				
			||||||
    assert(!pixmap_priv->fbo);
 | 
					    assert(!pixmap_priv->fbo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_make_current(glamor_priv);
 | 
					    glamor_make_current(glamor_priv);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,6 +25,9 @@
 | 
				
			||||||
 *    Zhigang Gong <zhigang.gong@linux.intel.com>
 | 
					 *    Zhigang Gong <zhigang.gong@linux.intel.com>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_transform.h"
 | 
					#include "glamor_transform.h"
 | 
				
			||||||
| 
						 | 
					@ -88,6 +91,8 @@ glamor_poly_point_gl(DrawablePtr drawable, GCPtr gc, int mode, int npt, DDXPoint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
					        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
				
			||||||
        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
					        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_prepare.h"
 | 
					#include "glamor_prepare.h"
 | 
				
			||||||
| 
						 | 
					@ -41,6 +44,8 @@ glamor_prep_drawable_box(DrawablePtr drawable, glamor_access_t access, BoxPtr bo
 | 
				
			||||||
    RegionRec                   region;
 | 
					    RegionRec                   region;
 | 
				
			||||||
    int                         off_x, off_y;
 | 
					    int                         off_x, off_y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (priv->type == GLAMOR_DRM_ONLY)
 | 
					    if (priv->type == GLAMOR_DRM_ONLY)
 | 
				
			||||||
        return FALSE;
 | 
					        return FALSE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -159,6 +164,8 @@ glamor_finish_access(DrawablePtr drawable)
 | 
				
			||||||
    if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv))
 | 
					    if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv))
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!priv->prepared)
 | 
					    if (!priv->prepared)
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <X11/Xfuncproto.h>
 | 
					#include <X11/Xfuncproto.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor.h"
 | 
					#include "glamor.h"
 | 
				
			||||||
#include "xvdix.h"
 | 
					#include "xvdix.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -463,7 +465,7 @@ static inline Bool
 | 
				
			||||||
glamor_pixmap_drm_only(PixmapPtr pixmap)
 | 
					glamor_pixmap_drm_only(PixmapPtr pixmap)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
    return priv->type == GLAMOR_DRM_ONLY;
 | 
					    return priv->type == GLAMOR_DRM_ONLY;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -474,7 +476,7 @@ static inline Bool
 | 
				
			||||||
glamor_pixmap_is_memory(PixmapPtr pixmap)
 | 
					glamor_pixmap_is_memory(PixmapPtr pixmap)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
    return priv->type == GLAMOR_MEMORY;
 | 
					    return priv->type == GLAMOR_MEMORY;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -484,12 +486,14 @@ glamor_pixmap_is_memory(PixmapPtr pixmap)
 | 
				
			||||||
static inline Bool
 | 
					static inline Bool
 | 
				
			||||||
glamor_pixmap_priv_is_large(glamor_pixmap_private *priv)
 | 
					glamor_pixmap_priv_is_large(glamor_pixmap_private *priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
    return priv->block_wcnt > 1 || priv->block_hcnt > 1;
 | 
					    return priv->block_wcnt > 1 || priv->block_hcnt > 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline Bool
 | 
					static inline Bool
 | 
				
			||||||
glamor_pixmap_priv_is_small(glamor_pixmap_private *priv)
 | 
					glamor_pixmap_priv_is_small(glamor_pixmap_private *priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
    return priv->block_wcnt <= 1 && priv->block_hcnt <= 1;
 | 
					    return priv->block_wcnt <= 1 && priv->block_hcnt <= 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -507,7 +511,7 @@ static inline Bool
 | 
				
			||||||
glamor_pixmap_has_fbo(PixmapPtr pixmap)
 | 
					glamor_pixmap_has_fbo(PixmapPtr pixmap)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, FALSE);
 | 
				
			||||||
    return priv->gl_fbo == GLAMOR_FBO_NORMAL;
 | 
					    return priv->gl_fbo == GLAMOR_FBO_NORMAL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -515,6 +519,7 @@ static inline void
 | 
				
			||||||
glamor_set_pixmap_fbo_current(glamor_pixmap_private *priv, int idx)
 | 
					glamor_set_pixmap_fbo_current(glamor_pixmap_private *priv, int idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (glamor_pixmap_priv_is_large(priv)) {
 | 
					    if (glamor_pixmap_priv_is_large(priv)) {
 | 
				
			||||||
 | 
					        BUG_RETURN(!priv);
 | 
				
			||||||
        priv->fbo = priv->fbo_array[idx];
 | 
					        priv->fbo = priv->fbo_array[idx];
 | 
				
			||||||
        priv->box = priv->box_array[idx];
 | 
					        priv->box = priv->box_array[idx];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -523,6 +528,7 @@ glamor_set_pixmap_fbo_current(glamor_pixmap_private *priv, int idx)
 | 
				
			||||||
static inline glamor_pixmap_fbo *
 | 
					static inline glamor_pixmap_fbo *
 | 
				
			||||||
glamor_pixmap_fbo_at(glamor_pixmap_private *priv, int box)
 | 
					glamor_pixmap_fbo_at(glamor_pixmap_private *priv, int box)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    assert(priv);
 | 
				
			||||||
    assert(box < priv->block_wcnt * priv->block_hcnt);
 | 
					    assert(box < priv->block_wcnt * priv->block_hcnt);
 | 
				
			||||||
    return priv->fbo_array[box];
 | 
					    return priv->fbo_array[box];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -530,6 +536,7 @@ glamor_pixmap_fbo_at(glamor_pixmap_private *priv, int box)
 | 
				
			||||||
static inline BoxPtr
 | 
					static inline BoxPtr
 | 
				
			||||||
glamor_pixmap_box_at(glamor_pixmap_private *priv, int box)
 | 
					glamor_pixmap_box_at(glamor_pixmap_private *priv, int box)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    assert(priv);
 | 
				
			||||||
    assert(box < priv->block_wcnt * priv->block_hcnt);
 | 
					    assert(box < priv->block_wcnt * priv->block_hcnt);
 | 
				
			||||||
    return &priv->box_array[box];
 | 
					    return &priv->box_array[box];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -537,12 +544,14 @@ glamor_pixmap_box_at(glamor_pixmap_private *priv, int box)
 | 
				
			||||||
static inline int
 | 
					static inline int
 | 
				
			||||||
glamor_pixmap_wcnt(glamor_pixmap_private *priv)
 | 
					glamor_pixmap_wcnt(glamor_pixmap_private *priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, 0);
 | 
				
			||||||
    return priv->block_wcnt;
 | 
					    return priv->block_wcnt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline int
 | 
					static inline int
 | 
				
			||||||
glamor_pixmap_hcnt(glamor_pixmap_private *priv)
 | 
					glamor_pixmap_hcnt(glamor_pixmap_private *priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!priv, 0);
 | 
				
			||||||
    return priv->block_hcnt;
 | 
					    return priv->block_hcnt;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_program.h"
 | 
					#include "glamor_program.h"
 | 
				
			||||||
| 
						 | 
					@ -126,6 +129,8 @@ glamor_poly_fill_rect_gl(DrawablePtr drawable,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glEnable(GL_SCISSOR_TEST);
 | 
					    glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN_VAL(!pixmap_priv, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
					        int nbox = RegionNumRects(gc->pCompositeClip);
 | 
				
			||||||
        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
					        BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,9 +31,13 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Render acceleration implementation
 | 
					 * Render acceleration implementation
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "mipict.h"
 | 
					#include "mipict.h"
 | 
				
			||||||
#include "fbpict.h"
 | 
					#include "fbpict.h"
 | 
				
			||||||
#if 0
 | 
					#if 0
 | 
				
			||||||
| 
						 | 
					@ -581,6 +585,7 @@ glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit,
 | 
				
			||||||
                             glamor_pixmap_private *dest_priv)
 | 
					                             glamor_pixmap_private *dest_priv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
					    glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
    glamor_pixmap_fbo *fbo = pixmap_priv->fbo;
 | 
					    glamor_pixmap_fbo *fbo = pixmap_priv->fbo;
 | 
				
			||||||
    float wh[4];
 | 
					    float wh[4];
 | 
				
			||||||
    int repeat_type;
 | 
					    int repeat_type;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,9 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include <dixfontstr.h>
 | 
					#include <dixfontstr.h>
 | 
				
			||||||
| 
						 | 
					@ -188,6 +191,8 @@ glamor_text(DrawablePtr drawable, GCPtr gc,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        glEnable(GL_SCISSOR_TEST);
 | 
					        glEnable(GL_SCISSOR_TEST);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BUG_RETURN_VAL(!pixmap_priv, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
					        glamor_pixmap_loop(pixmap_priv, box_index) {
 | 
				
			||||||
            BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
					            BoxPtr box = RegionRects(gc->pCompositeClip);
 | 
				
			||||||
            int nbox = RegionNumRects(gc->pCompositeClip);
 | 
					            int nbox = RegionNumRects(gc->pCompositeClip);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,11 @@
 | 
				
			||||||
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
					 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 | 
				
			||||||
 * OF THIS SOFTWARE.
 | 
					 * OF THIS SOFTWARE.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_transfer.h"
 | 
					#include "glamor_transfer.h"
 | 
				
			||||||
| 
						 | 
					@ -51,6 +56,8 @@ glamor_upload_boxes(DrawablePtr drawable, BoxPtr in_boxes, int in_nbox,
 | 
				
			||||||
    if (glamor_priv->has_unpack_subimage)
 | 
					    if (glamor_priv->has_unpack_subimage)
 | 
				
			||||||
        glPixelStorei(GL_UNPACK_ROW_LENGTH, byte_stride / bytes_per_pixel);
 | 
					        glPixelStorei(GL_UNPACK_ROW_LENGTH, byte_stride / bytes_per_pixel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(priv, box_index) {
 | 
					    glamor_pixmap_loop(priv, box_index) {
 | 
				
			||||||
        BoxPtr                  box = glamor_pixmap_box_at(priv, box_index);
 | 
					        BoxPtr                  box = glamor_pixmap_box_at(priv, box_index);
 | 
				
			||||||
        glamor_pixmap_fbo       *fbo = glamor_pixmap_fbo_at(priv, box_index);
 | 
					        glamor_pixmap_fbo       *fbo = glamor_pixmap_fbo_at(priv, box_index);
 | 
				
			||||||
| 
						 | 
					@ -154,6 +161,8 @@ glamor_download_boxes(DrawablePtr drawable, BoxPtr in_boxes, int in_nbox,
 | 
				
			||||||
    if (glamor_priv->has_pack_subimage)
 | 
					    if (glamor_priv->has_pack_subimage)
 | 
				
			||||||
        glPixelStorei(GL_PACK_ROW_LENGTH, byte_stride / bytes_per_pixel);
 | 
					        glPixelStorei(GL_PACK_ROW_LENGTH, byte_stride / bytes_per_pixel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUG_RETURN(!priv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    glamor_pixmap_loop(priv, box_index) {
 | 
					    glamor_pixmap_loop(priv, box_index) {
 | 
				
			||||||
        BoxPtr                  box = glamor_pixmap_box_at(priv, box_index);
 | 
					        BoxPtr                  box = glamor_pixmap_box_at(priv, box_index);
 | 
				
			||||||
        glamor_pixmap_fbo       *fbo = glamor_pixmap_fbo_at(priv, box_index);
 | 
					        glamor_pixmap_fbo       *fbo = glamor_pixmap_fbo_at(priv, box_index);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,9 +31,12 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Xv acceleration implementation
 | 
					 * Xv acceleration implementation
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <dix-config.h>
 | 
					#include <dix-config.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "os/bug_priv.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "glamor_priv.h"
 | 
					#include "glamor_priv.h"
 | 
				
			||||||
#include "glamor_transform.h"
 | 
					#include "glamor_transform.h"
 | 
				
			||||||
#include "glamor_transfer.h"
 | 
					#include "glamor_transfer.h"
 | 
				
			||||||
| 
						 | 
					@ -580,6 +583,7 @@ glamor_xv_render(glamor_port_private *port_priv, int id)
 | 
				
			||||||
    glamor_put_vbo_space(screen);
 | 
					    glamor_put_vbo_space(screen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Now draw our big triangle, clipped to each of the clip boxes. */
 | 
					    /* Now draw our big triangle, clipped to each of the clip boxes. */
 | 
				
			||||||
 | 
					    BUG_RETURN(!pixmap_priv);
 | 
				
			||||||
    glamor_pixmap_loop(pixmap_priv, dst_box_index) {
 | 
					    glamor_pixmap_loop(pixmap_priv, dst_box_index) {
 | 
				
			||||||
        int dst_off_x, dst_off_y;
 | 
					        int dst_off_x, dst_off_y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue