X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fintel%2Fintel_fbo.h;h=586dbbbb25a198863ea957cf52d0758f77907df9;hb=43867acb6afc7fad26cdc2f22b2a3bb6eeefb2da;hp=9d15582d78c8d1da410a3f83ce8bf4b3b3a2e6b0;hpb=205e0e3e38b99c2fb0298755d99a38f111f0b96f;p=mesa.git diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h b/src/mesa/drivers/dri/intel/intel_fbo.h index 9d15582d78c..586dbbbb25a 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.h +++ b/src/mesa/drivers/dri/intel/intel_fbo.h @@ -28,88 +28,88 @@ #ifndef INTEL_FBO_H #define INTEL_FBO_H +#include "main/formats.h" #include "intel_screen.h" struct intel_context; /** - * Intel framebuffer, derived from gl_framebuffer. + * Intel renderbuffer, derived from gl_renderbuffer. */ -struct intel_framebuffer +struct intel_renderbuffer { - struct gl_framebuffer Base; - - struct intel_renderbuffer *color_rb[3]; - - /* Drawable page flipping state */ - GLboolean pf_active; - GLuint pf_seq; - GLint pf_planes; - GLint pf_current_page; - GLint pf_num_pages; - - /* VBI - */ - GLuint vbl_waited; - - int64_t swap_ust; - int64_t swap_missed_ust; + struct gl_renderbuffer Base; + struct intel_region *region; - GLuint swap_count; - GLuint swap_missed_count; + uint8_t *span_cache; + unsigned long span_cache_offset; }; /** - * Intel renderbuffer, derived from gl_renderbuffer. - * Note: The PairedDepth and PairedStencil fields use renderbuffer IDs, - * not pointers because in some circumstances a deleted renderbuffer could - * result in a dangling pointer here. + * gl_renderbuffer is a base class which we subclass. The Class field + * is used for simple run-time type checking. */ -struct intel_renderbuffer -{ - struct gl_renderbuffer Base; - struct intel_region *region; - GLuint pfPitch; /* possibly paged flipped pitch */ - GLboolean RenderToTexture; /* RTT? */ +#define INTEL_RB_CLASS 0x12345678 - GLuint PairedDepth; /**< only used if this is a depth renderbuffer */ - GLuint PairedStencil; /**< only used if this is a stencil renderbuffer */ - GLuint pf_pending; /**< sequence number of pending flip */ +/** + * Return a gl_renderbuffer ptr casted to intel_renderbuffer. + * NULL will be returned if the rb isn't really an intel_renderbuffer. + * This is determined by checking the ClassID. + */ +static INLINE struct intel_renderbuffer * +intel_renderbuffer(struct gl_renderbuffer *rb) +{ + struct intel_renderbuffer *irb = (struct intel_renderbuffer *) rb; + if (irb && irb->Base.ClassID == INTEL_RB_CLASS) { + /*_mesa_warning(NULL, "Returning non-intel Rb\n");*/ + return irb; + } + else + return NULL; +} - GLuint vbl_pending; /**< vblank sequence number of pending flip */ - uint8_t *span_cache; - unsigned long span_cache_offset; -}; +/** + * Return a framebuffer's renderbuffer, named by a BUFFER_x index. + */ +static INLINE struct intel_renderbuffer * +intel_get_renderbuffer(struct gl_framebuffer *fb, int attIndex) +{ + if (attIndex >= 0) + return intel_renderbuffer(fb->Attachment[attIndex].Renderbuffer); + else + return NULL; +} -extern struct intel_renderbuffer *intel_renderbuffer(struct gl_renderbuffer - *rb); extern void intel_renderbuffer_set_region(struct intel_renderbuffer *irb, struct intel_region *region); -extern struct intel_renderbuffer * -intel_create_renderbuffer(GLenum intFormat); - -extern void intel_fbo_init(struct intel_context *intel); +extern struct intel_renderbuffer * +intel_create_renderbuffer(gl_format format); -/* XXX make inline or macro */ -extern struct intel_renderbuffer *intel_get_renderbuffer(struct gl_framebuffer - *fb, - int attIndex); -extern void intel_flip_renderbuffers(struct intel_framebuffer *intel_fb); +extern void +intel_fbo_init(struct intel_context *intel); -/* XXX make inline or macro */ -extern struct intel_region *intel_get_rb_region(struct gl_framebuffer *fb, - GLuint attIndex); +extern void +intel_flip_renderbuffers(struct gl_framebuffer *fb); +static INLINE struct intel_region * +intel_get_rb_region(struct gl_framebuffer *fb, GLuint attIndex) +{ + struct intel_renderbuffer *irb = intel_get_renderbuffer(fb, attIndex); + if (irb) + return irb->region; + else + return NULL; +} #endif /* INTEL_FBO_H */