intel-2D: sna vsync api

git-svn-id: svn://kolibrios.org@4377 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2013-12-19 04:21:53 +00:00
parent d655103a9d
commit d5c80240f4
5 changed files with 30 additions and 37 deletions

View File

@ -69,7 +69,7 @@ endif
# targets
all:$(LIBRARY).dll intel-sna.drv intel-uxa.drv
all:$(LIBRARY).dll intel-sna.drv
uxa:$(LIBRARY).dll
ebox:$(LIBRARY).dll

View File

@ -0,0 +1,17 @@
#ifndef __PIXDRIVER_H__
#define __PIXDRIVER_H__
struct pix_driver
{
char *name;
int (*create_bitmap)(bitmap_t * bitmap);
int (*destroy_bitmap)(bitmap_t * bitmap);
int (*lock_bitmap)(bitmap_t * bitmap);
int (*blit)(bitmap_t * bitmap, int scale, int vsync,
int dst_x, int dst_y, int w, int h, int src_x, int src_y);
int (*resize_bitmap)(bitmap_t * bitmap);
void (*fini)(void);
};
#endif

View File

@ -5,22 +5,12 @@
#include <malloc.h>
#include <stdbool.h>
#include <pixlib2.h>
#include "pixdriver.h"
#include <kos32sys.h>
void* load_library(const char *name);
struct pix_driver
{
char *name;
int (*create_bitmap)(bitmap_t * bitmap);
int (*destroy_bitmap)(bitmap_t * bitmap);
int (*lock_bitmap)(bitmap_t * bitmap);
int (*blit)(bitmap_t * bitmap, bool scale, int dst_x, int dst_y,
int w, int h, int src_x, int src_y);
int (*resize_bitmap)(bitmap_t * bitmap);
void (*fini)(void);
};
#define DISPLAY_VERSION 0x0200 /* 2.00 */
@ -202,7 +192,7 @@ int blit_bitmap(bitmap_t * bitmap, int dst_x, int dst_y,
surface_t *sf = to_surface(bitmap);
if (sf->flags & hw_caps & HW_BIT_BLIT)
return pix_driver.blit(bitmap, false, dst_x, dst_y, w, h, src_x, src_y);
return pix_driver.blit(bitmap, 0, 0, dst_x, dst_y, w, h, src_x, src_y);
bc.dstx = dst_x;
bc.dsty = dst_y;
@ -233,7 +223,7 @@ int fplay_blit_bitmap(bitmap_t * bitmap, int dst_x, int dst_y, int w, int h)
surface_t *sf = to_surface(bitmap);
if (sf->flags & hw_caps & HW_TEX_BLIT)
return pix_driver.blit(bitmap, true, dst_x, dst_y, w, h, 0, 0);
return pix_driver.blit(bitmap, 1, 1, dst_x, dst_y, w, h, 0, 0);
bc.dstx = dst_x;
bc.dsty = dst_y;

View File

@ -46,6 +46,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "sna_reg.h"
#include <pixlib2.h>
#include "../pixdriver.h"
#include <kos32sys.h>
#define to_surface(x) (surface_t*)((x)->handle)
@ -57,20 +59,6 @@ typedef struct {
int b;
} rect_t;
struct pix_driver
{
char *name;
int (*create_bitmap)(bitmap_t * bitmap);
int (*destroy_bitmap)(bitmap_t * bitmap);
int (*lock_bitmap)(bitmap_t * bitmap);
int (*blit)(bitmap_t * bitmap, bool scale, int dst_x, int dst_y,
int w, int h, int src_x, int src_y);
int (*resize_bitmap)(bitmap_t * bitmap);
void (*fini)(void);
};
static struct sna_fb sna_fb;
static int tls_mask;
@ -691,7 +679,7 @@ sna_wait_for_scanline(struct sna *sna,
full_height = y1 == 0 && y2 == crtc->b - crtc->t;
pipe = 0;
pipe = sna_fb.pipe;
DBG(("%s: pipe=%d, y1=%d, y2=%d, full_height?=%d\n",
__FUNCTION__, pipe, y1, y2, full_height));
@ -1092,8 +1080,8 @@ err_1:
int sna_blit_tex(bitmap_t *bitmap, bool scale, int dst_x, int dst_y,
int w, int h, int src_x, int src_y)
int sna_blit_tex(bitmap_t *bitmap, int scale, int vsync,
int dst_x, int dst_y,int w, int h, int src_x, int src_y)
{
surface_t *sf = to_surface(bitmap);
@ -1165,7 +1153,7 @@ int sna_blit_tex(bitmap_t *bitmap, bool scale, int dst_x, int dst_y,
__lock_acquire_recursive(__sna_lock);
#if 0
if(vsync)
{
rect_t crtc, clip;
@ -1182,7 +1170,6 @@ int sna_blit_tex(bitmap_t *bitmap, bool scale, int dst_x, int dst_y,
kgem_set_mode(&sna_device->kgem, KGEM_RENDER, sna_fb.fb_bo);
sna_wait_for_scanline(sna_device, &crtc, &clip);
}
#endif
if( sna_device->render.blit_tex(sna_device, PictOpSrc,scale,
&src, src_bo,
@ -1223,8 +1210,6 @@ int sna_blit_tex(bitmap_t *bitmap, bool scale, int dst_x, int dst_y,
static void sna_fini()
{
ENTER();
if( sna_device )
{
struct kgem_bo *mask;
@ -1242,7 +1227,6 @@ static void sna_fini()
sna_device = NULL;
__lock_release_recursive(__sna_lock);
};
LEAVE();
}
uint32_t DrvInit(uint32_t service, struct pix_driver *driver)

View File

@ -391,6 +391,8 @@ struct sna_fb
uint32_t height;
uint32_t pitch;
uint32_t tiling;
uint32_t crtc;
uint32_t pipe;
struct kgem_bo *fb_bo;
};