summaryrefslogtreecommitdiff
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian <brian@i915.localnet.net>2007-08-09 12:59:11 -0600
committerBrian <brian@i915.localnet.net>2007-08-09 14:29:48 -0600
commitf5713c7d2e7ba8e1170fd9b1dd95379662ab6117 (patch)
tree30cf85b542002d7bba214eb250ca34d96cbd06d1 /src/mesa/state_tracker
parent36fc648ddd937962e659d6215ed6cfb864fb9f05 (diff)
Checkpoint intel_renderbuffer removal.
Remove surface ptr from gl_renderbuffer. Use st_renderbuffer in most places. More clean-up.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_atom_framebuffer.c27
-rw-r--r--src/mesa/state_tracker/st_cb_clear.c35
-rw-r--r--src/mesa/state_tracker/st_cb_fbo.c82
-rw-r--r--src/mesa/state_tracker/st_cb_fbo.h23
4 files changed, 85 insertions, 82 deletions
diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c
index 7edd044ad9..f054eb8f21 100644
--- a/src/mesa/state_tracker/st_atom_framebuffer.c
+++ b/src/mesa/state_tracker/st_atom_framebuffer.c
@@ -33,6 +33,7 @@
#include "st_context.h"
#include "st_atom.h"
+#include "st_cb_fbo.h"
#include "pipe/p_context.h"
@@ -44,7 +45,7 @@ static void
update_framebuffer_state( struct st_context *st )
{
struct pipe_framebuffer_state framebuffer;
- struct gl_renderbuffer *rb;
+ struct st_renderbuffer *strb;
GLuint i;
memset(&framebuffer, 0, sizeof(framebuffer));
@@ -54,21 +55,23 @@ update_framebuffer_state( struct st_context *st )
*/
framebuffer.num_cbufs = st->ctx->DrawBuffer->_NumColorDrawBuffers[0];
for (i = 0; i < framebuffer.num_cbufs; i++) {
- rb = st->ctx->DrawBuffer->_ColorDrawBuffers[0][i];
- assert(rb->surface);
- framebuffer.cbufs[i] = rb->surface;
+ strb = st_renderbuffer(st->ctx->DrawBuffer->_ColorDrawBuffers[0][i]);
+ assert(strb->surface);
+ framebuffer.cbufs[i] = strb->surface;
}
- rb = st->ctx->DrawBuffer->_DepthBuffer;
- if (rb) {
- assert(rb->Wrapped->surface);
- framebuffer.zbuf = rb->Wrapped->surface;
+ strb = st_renderbuffer(st->ctx->DrawBuffer->_DepthBuffer);
+ if (strb) {
+ strb = st_renderbuffer(strb->Base.Wrapped);
+ assert(strb->surface);
+ framebuffer.zbuf = strb->surface;
}
- rb = st->ctx->DrawBuffer->_StencilBuffer;
- if (rb) {
- assert(rb->Wrapped->surface);
- framebuffer.sbuf = rb->Wrapped->surface;
+ strb = st_renderbuffer(st->ctx->DrawBuffer->_StencilBuffer);
+ if (strb) {
+ strb = st_renderbuffer(strb->Base.Wrapped);
+ assert(strb->surface);
+ framebuffer.sbuf = strb->surface;
}
if (memcmp(&framebuffer, &st->state.framebuffer, sizeof(framebuffer)) != 0) {
diff --git a/src/mesa/state_tracker/st_cb_clear.c b/src/mesa/state_tracker/st_cb_clear.c
index d862f7ba46..4da3a2500d 100644
--- a/src/mesa/state_tracker/st_cb_clear.c
+++ b/src/mesa/state_tracker/st_cb_clear.c
@@ -37,6 +37,7 @@
#include "st_atom.h"
#include "st_context.h"
#include "st_cb_clear.h"
+#include "st_cb_fbo.h"
#include "st_program.h"
#include "st_public.h"
#include "pipe/p_context.h"
@@ -288,6 +289,8 @@ clear_with_quad(GLcontext *ctx, GLuint x0, GLuint y0,
static void
clear_color_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
+
if (ctx->Color.ColorMask[0] &&
ctx->Color.ColorMask[1] &&
ctx->Color.ColorMask[2] &&
@@ -296,8 +299,8 @@ clear_color_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
/* clear whole buffer w/out masking */
GLuint clearValue
- = color_value(rb->surface->format, ctx->Color.ClearColor);
- ctx->st->pipe->clear(ctx->st->pipe, rb->surface, clearValue);
+ = color_value(strb->surface->format, ctx->Color.ClearColor);
+ ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
}
else {
/* masking or scissoring */
@@ -314,14 +317,16 @@ clear_color_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
static void
clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
+
if (!ctx->Scissor.Enabled) {
/* clear whole buffer w/out masking */
GLuint clearValue
- = color_value(rb->surface->format, ctx->Accum.ClearColor);
+ = color_value(strb->surface->format, ctx->Accum.ClearColor);
/* Note that clearValue is 32 bits but the accum buffer will
* typically be 64bpp...
*/
- ctx->st->pipe->clear(ctx->st->pipe, rb->surface, clearValue);
+ ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
}
else {
/* scissoring */
@@ -339,11 +344,13 @@ clear_accum_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
static void
clear_depth_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
+
if (!ctx->Scissor.Enabled &&
- !is_depth_stencil_format(rb->surface->format)) {
+ !is_depth_stencil_format(strb->surface->format)) {
/* clear whole depth buffer w/out masking */
- GLuint clearValue = depth_value(rb->surface->format, ctx->Depth.Clear);
- ctx->st->pipe->clear(ctx->st->pipe, rb->surface, clearValue);
+ GLuint clearValue = depth_value(strb->surface->format, ctx->Depth.Clear);
+ ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
}
else {
/* masking or scissoring or combined z/stencil buffer */
@@ -360,14 +367,15 @@ clear_depth_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
static void
clear_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
const GLuint stencilMax = (1 << rb->StencilBits) - 1;
GLboolean maskStencil = ctx->Stencil.WriteMask[0] != stencilMax;
if (!maskStencil && !ctx->Scissor.Enabled &&
- !is_depth_stencil_format(rb->surface->format)) {
+ !is_depth_stencil_format(strb->surface->format)) {
/* clear whole stencil buffer w/out masking */
GLuint clearValue = ctx->Stencil.Clear;
- ctx->st->pipe->clear(ctx->st->pipe, rb->surface, clearValue);
+ ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
}
else {
/* masking or scissoring */
@@ -384,16 +392,17 @@ clear_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
static void
clear_depth_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
const GLuint stencilMax = 1 << rb->StencilBits;
GLboolean maskStencil = ctx->Stencil.WriteMask[0] != stencilMax;
- assert(is_depth_stencil_format(rb->surface->format));
+ assert(is_depth_stencil_format(strb->surface->format));
if (!maskStencil && !ctx->Scissor.Enabled) {
/* clear whole buffer w/out masking */
- GLuint clearValue = depth_value(rb->surface->format, ctx->Depth.Clear);
+ GLuint clearValue = depth_value(strb->surface->format, ctx->Depth.Clear);
- switch (rb->surface->format) {
+ switch (strb->surface->format) {
case PIPE_FORMAT_S8_Z24:
clearValue |= ctx->Stencil.Clear << 24;
break;
@@ -406,7 +415,7 @@ clear_depth_stencil_buffer(GLcontext *ctx, struct gl_renderbuffer *rb)
assert(0);
}
- ctx->st->pipe->clear(ctx->st->pipe, rb->surface, clearValue);
+ ctx->st->pipe->clear(ctx->st->pipe, strb->surface, clearValue);
}
else {
/* masking or scissoring */
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c
index 3cd1fbe851..02bdb5aba5 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -46,29 +46,6 @@
#include "st_cb_teximage.h"
-/**
- * Derived renderbuffer class. Just need to add a pointer to the
- * pipe surface.
- */
-struct st_renderbuffer
-{
- struct gl_renderbuffer Base;
-#if 0
- struct pipe_surface *surface;
-#endif
-};
-
-
-/**
- * Cast wrapper.
- */
-static INLINE struct st_renderbuffer *
-st_renderbuffer(struct gl_renderbuffer *rb)
-{
- return (struct st_renderbuffer *) rb;
-}
-
-
struct pipe_format_info
{
GLuint format;
@@ -168,29 +145,29 @@ st_renderbuffer_alloc_storage(GLcontext * ctx, struct gl_renderbuffer *rb,
cpp = info->size;
- if (!strb->Base.surface) {
- strb->Base.surface = pipe->surface_alloc(pipe, pipeFormat);
- if (!strb->Base.surface)
+ if (!strb->surface) {
+ strb->surface = pipe->surface_alloc(pipe, pipeFormat);
+ if (!strb->surface)
return GL_FALSE;
}
/* free old region */
- if (strb->Base.surface->region) {
- pipe->region_release(pipe, &strb->Base.surface->region);
+ if (strb->surface->region) {
+ pipe->region_release(pipe, &strb->surface->region);
}
/* Choose a pitch to match hardware requirements:
*/
pitch = ((cpp * width + 63) & ~63) / cpp; /* XXX fix: device-specific */
- strb->Base.surface->region = pipe->region_alloc(pipe, cpp, pitch, height);
- if (!strb->Base.surface->region)
+ strb->surface->region = pipe->region_alloc(pipe, cpp, pitch, height);
+ if (!strb->surface->region)
return GL_FALSE; /* out of memory, try s/w buffer? */
- ASSERT(strb->Base.surface->region->buffer);
+ ASSERT(strb->surface->region->buffer);
- strb->Base.Width = strb->Base.surface->width = width;
- strb->Base.Height = strb->Base.surface->height = height;
+ strb->Base.Width = strb->surface->width = width;
+ strb->Base.Height = strb->surface->height = height;
return GL_TRUE;
}
@@ -206,11 +183,11 @@ st_renderbuffer_delete(struct gl_renderbuffer *rb)
struct pipe_context *pipe = ctx->st->pipe;
struct st_renderbuffer *strb = st_renderbuffer(rb);
ASSERT(strb);
- if (strb && strb->Base.surface) {
- if (rb->surface->region) {
- pipe->region_release(pipe, &strb->Base.surface->region);
+ if (strb && strb->surface) {
+ if (strb->surface->region) {
+ pipe->region_release(pipe, &strb->surface->region);
}
- free(strb->Base.surface);
+ free(strb->surface);
}
free(strb);
}
@@ -285,28 +262,28 @@ st_new_renderbuffer_fb(struct pipe_region *region, GLuint width, GLuint height)
struct gl_renderbuffer *
st_new_renderbuffer_fb(GLuint intFormat)
{
- struct st_renderbuffer *irb;
+ struct st_renderbuffer *strb;
- irb = CALLOC_STRUCT(st_renderbuffer);
- if (!irb) {
+ strb = CALLOC_STRUCT(st_renderbuffer);
+ if (!strb) {
_mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer");
return NULL;
}
- _mesa_init_renderbuffer(&irb->Base, 0);
- irb->Base.ClassID = 0x42; /* XXX temp */
- irb->Base.InternalFormat = intFormat;
+ _mesa_init_renderbuffer(&strb->Base, 0);
+ strb->Base.ClassID = 0x42; /* XXX temp */
+ strb->Base.InternalFormat = intFormat;
switch (intFormat) {
case GL_RGB5:
case GL_RGBA8:
- irb->Base._BaseFormat = GL_RGBA;
+ strb->Base._BaseFormat = GL_RGBA;
break;
case GL_DEPTH_COMPONENT16:
- irb->Base._BaseFormat = GL_DEPTH_COMPONENT;
+ strb->Base._BaseFormat = GL_DEPTH_COMPONENT;
break;
case GL_DEPTH24_STENCIL8_EXT:
- irb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
+ strb->Base._BaseFormat = GL_DEPTH_STENCIL_EXT;
break;
default:
_mesa_problem(NULL,
@@ -315,15 +292,14 @@ st_new_renderbuffer_fb(GLuint intFormat)
}
/* st-specific methods */
- irb->Base.Delete = st_renderbuffer_delete;
- irb->Base.AllocStorage = st_renderbuffer_alloc_storage;
- irb->Base.GetPointer = null_get_pointer;
- /* span routines set in alloc_storage function */
+ strb->Base.Delete = st_renderbuffer_delete;
+ strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
+ strb->Base.GetPointer = null_get_pointer;
- irb->Base.surface = NULL;/*intel_new_surface(intFormat);*/
- /*irb->Base.surface->rb = irb;*/
+ /* surface is allocate in alloc_renderbuffer_storage() */
+ strb->surface = NULL;
- return &irb->Base;
+ return &strb->Base;
}
#endif
diff --git a/src/mesa/state_tracker/st_cb_fbo.h b/src/mesa/state_tracker/st_cb_fbo.h
index 7f52ab10d7..b2e7ba810c 100644
--- a/src/mesa/state_tracker/st_cb_fbo.h
+++ b/src/mesa/state_tracker/st_cb_fbo.h
@@ -30,10 +30,25 @@
#define ST_CB_FBO_H
-/*
-extern struct gl_renderbuffer *
-st_new_renderbuffer_fb(struct pipe_region *region, GLuint width, GLuint height);
-*/
+
+/**
+ * Derived renderbuffer class. Just need to add a pointer to the
+ * pipe surface.
+ */
+struct st_renderbuffer
+{
+ struct gl_renderbuffer Base;
+ struct pipe_surface *surface;
+};
+
+
+static INLINE struct st_renderbuffer *
+st_renderbuffer(struct gl_renderbuffer *rb)
+{
+ return (struct st_renderbuffer *) rb;
+}
+
+
extern struct gl_renderbuffer *
st_new_renderbuffer_fb(GLuint intFormat);