swrast: move some renderbuffer functions to s_renderbuffer.c

(cherry picked from commit bde356a158)
This commit is contained in:
Brian Paul 2012-01-16 13:05:49 -07:00 committed by Ian Romanick
parent 05adf4d6e4
commit 9daa974d4d
2 changed files with 121 additions and 121 deletions

View file

@ -552,3 +552,124 @@ _swrast_add_soft_renderbuffers(struct gl_framebuffer *fb,
}
#endif
}
static void
map_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
gl_buffer_index buffer)
{
struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
if (texObj) {
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {
struct swrast_texture_image *swImage
= swrast_texture_image(texImage);
/* XXX we'll eventually call _swrast_map_teximage() here */
swImage->Map = swImage->Buffer;
if (srb) {
srb->Map = swImage->Buffer;
srb->RowStride = swImage->RowStride *
_mesa_get_format_bytes(swImage->Base.TexFormat);
}
}
}
else if (rb) {
/* Map ordinary renderbuffer */
ctx->Driver.MapRenderbuffer(ctx, rb,
0, 0, rb->Width, rb->Height,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&srb->Map, &srb->RowStride);
assert(srb->Map);
}
}
static void
unmap_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
gl_buffer_index buffer)
{
struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
if (texObj) {
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {
/* XXX we'll eventually call _swrast_unmap_teximage() here */
}
}
else if (rb) {
/* unmap ordinary renderbuffer */
ctx->Driver.UnmapRenderbuffer(ctx, rb);
}
srb->Map = NULL;
}
/**
* Map the renderbuffers we'll use for tri/line/point rendering.
*/
void
_swrast_map_renderbuffers(struct gl_context *ctx)
{
struct gl_framebuffer *fb = ctx->DrawBuffer;
struct gl_renderbuffer *depthRb, *stencilRb;
GLuint buf;
depthRb = fb->Attachment[BUFFER_DEPTH].Renderbuffer;
if (depthRb) {
/* map depth buffer */
map_attachment(ctx, fb, BUFFER_DEPTH);
}
stencilRb = fb->Attachment[BUFFER_STENCIL].Renderbuffer;
if (stencilRb && stencilRb != depthRb) {
/* map stencil buffer */
map_attachment(ctx, fb, BUFFER_STENCIL);
}
for (buf = 0; buf < fb->_NumColorDrawBuffers; buf++) {
map_attachment(ctx, fb, fb->_ColorDrawBufferIndexes[buf]);
}
}
/**
* Unmap renderbuffers after rendering.
*/
void
_swrast_unmap_renderbuffers(struct gl_context *ctx)
{
struct gl_framebuffer *fb = ctx->DrawBuffer;
struct gl_renderbuffer *depthRb, *stencilRb;
GLuint buf;
depthRb = fb->Attachment[BUFFER_DEPTH].Renderbuffer;
if (depthRb) {
/* map depth buffer */
unmap_attachment(ctx, fb, BUFFER_DEPTH);
}
stencilRb = fb->Attachment[BUFFER_STENCIL].Renderbuffer;
if (stencilRb && stencilRb != depthRb) {
/* map stencil buffer */
unmap_attachment(ctx, fb, BUFFER_STENCIL);
}
for (buf = 0; buf < fb->_NumColorDrawBuffers; buf++) {
unmap_attachment(ctx, fb, fb->_ColorDrawBufferIndexes[buf]);
}
}

View file

@ -315,127 +315,6 @@ _swrast_unmap_textures(struct gl_context *ctx)
}
static void
map_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
gl_buffer_index buffer)
{
struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
if (texObj) {
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {
struct swrast_texture_image *swImage
= swrast_texture_image(texImage);
/* XXX we'll eventually call _swrast_map_teximage() here */
swImage->Map = swImage->Buffer;
if (srb) {
srb->Map = swImage->Buffer;
srb->RowStride = swImage->RowStride *
_mesa_get_format_bytes(swImage->Base.TexFormat);
}
}
}
else if (rb) {
/* Map ordinary renderbuffer */
ctx->Driver.MapRenderbuffer(ctx, rb,
0, 0, rb->Width, rb->Height,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT,
&srb->Map, &srb->RowStride);
assert(srb->Map);
}
}
static void
unmap_attachment(struct gl_context *ctx,
struct gl_framebuffer *fb,
gl_buffer_index buffer)
{
struct gl_texture_object *texObj = fb->Attachment[buffer].Texture;
struct gl_renderbuffer *rb = fb->Attachment[buffer].Renderbuffer;
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
if (texObj) {
const GLuint level = fb->Attachment[buffer].TextureLevel;
const GLuint face = fb->Attachment[buffer].CubeMapFace;
struct gl_texture_image *texImage = texObj->Image[face][level];
if (texImage) {
/* XXX we'll eventually call _swrast_unmap_teximage() here */
}
}
else if (rb) {
/* unmap ordinary renderbuffer */
ctx->Driver.UnmapRenderbuffer(ctx, rb);
}
srb->Map = NULL;
}
/**
* Map the renderbuffers we'll use for tri/line/point rendering.
*/
void
_swrast_map_renderbuffers(struct gl_context *ctx)
{
struct gl_framebuffer *fb = ctx->DrawBuffer;
struct gl_renderbuffer *depthRb, *stencilRb;
GLuint buf;
depthRb = fb->Attachment[BUFFER_DEPTH].Renderbuffer;
if (depthRb) {
/* map depth buffer */
map_attachment(ctx, fb, BUFFER_DEPTH);
}
stencilRb = fb->Attachment[BUFFER_STENCIL].Renderbuffer;
if (stencilRb && stencilRb != depthRb) {
/* map stencil buffer */
map_attachment(ctx, fb, BUFFER_STENCIL);
}
for (buf = 0; buf < fb->_NumColorDrawBuffers; buf++) {
map_attachment(ctx, fb, fb->_ColorDrawBufferIndexes[buf]);
}
}
/**
* Unmap renderbuffers after rendering.
*/
void
_swrast_unmap_renderbuffers(struct gl_context *ctx)
{
struct gl_framebuffer *fb = ctx->DrawBuffer;
struct gl_renderbuffer *depthRb, *stencilRb;
GLuint buf;
depthRb = fb->Attachment[BUFFER_DEPTH].Renderbuffer;
if (depthRb) {
/* map depth buffer */
unmap_attachment(ctx, fb, BUFFER_DEPTH);
}
stencilRb = fb->Attachment[BUFFER_STENCIL].Renderbuffer;
if (stencilRb && stencilRb != depthRb) {
/* map stencil buffer */
unmap_attachment(ctx, fb, BUFFER_STENCIL);
}
for (buf = 0; buf < fb->_NumColorDrawBuffers; buf++) {
unmap_attachment(ctx, fb, fb->_ColorDrawBufferIndexes[buf]);
}
}
/**
* Called via ctx->Driver.AllocTextureStorage()
* Just have to allocate memory for the texture images.