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 # targets
all:$(LIBRARY).dll intel-sna.drv intel-uxa.drv all:$(LIBRARY).dll intel-sna.drv
uxa:$(LIBRARY).dll uxa:$(LIBRARY).dll
ebox:$(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 <malloc.h>
#include <stdbool.h> #include <stdbool.h>
#include <pixlib2.h> #include <pixlib2.h>
#include "pixdriver.h"
#include <kos32sys.h> #include <kos32sys.h>
void* load_library(const char *name); 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 */ #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); surface_t *sf = to_surface(bitmap);
if (sf->flags & hw_caps & HW_BIT_BLIT) 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.dstx = dst_x;
bc.dsty = dst_y; 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); surface_t *sf = to_surface(bitmap);
if (sf->flags & hw_caps & HW_TEX_BLIT) 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.dstx = dst_x;
bc.dsty = dst_y; bc.dsty = dst_y;

View File

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

View File

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