i965/gs: implement EndPrimitive() functionality in the visitor.
[mesa.git] / src / mesa / drivers / dri / nouveau / nouveau_fbo.c
index c3e23412df75d8a8b430fe5317dd4746650d0bae..25543e458b44e9b0fb30b1c81b92ee4e3925304e 100644 (file)
@@ -32,7 +32,6 @@
 #include "main/framebuffer.h"
 #include "main/renderbuffer.h"
 #include "main/fbobject.h"
-#include "main/mfeatures.h"
 
 static GLboolean
 set_renderbuffer_format(struct gl_renderbuffer *rb, GLenum internalFormat)
@@ -102,12 +101,12 @@ nouveau_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
 }
 
 static void
-nouveau_renderbuffer_del(struct gl_renderbuffer *rb)
+nouveau_renderbuffer_del(struct gl_context *ctx, struct gl_renderbuffer *rb)
 {
        struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface;
 
        nouveau_surface_ref(NULL, s);
-       _mesa_delete_renderbuffer(rb);
+       _mesa_delete_renderbuffer(ctx, rb);
 }
 
 static struct gl_renderbuffer *
@@ -195,7 +194,7 @@ nouveau_renderbuffer_dri_new(GLenum format, __DRIdrawable *drawable)
        rb->AllocStorage = nouveau_renderbuffer_dri_storage;
 
        if (!set_renderbuffer_format(rb, format)) {
-               nouveau_renderbuffer_del(rb);
+               nouveau_renderbuffer_del(NULL, rb);
                return NULL;
        }
 
@@ -248,43 +247,14 @@ nouveau_framebuffer_renderbuffer(struct gl_context *ctx, struct gl_framebuffer *
        context_dirty(ctx, FRAMEBUFFER);
 }
 
-static GLenum
-get_tex_format(struct gl_texture_image *ti)
-{
-       switch (ti->TexFormat) {
-       case MESA_FORMAT_ARGB8888:
-               return GL_RGBA8;
-       case MESA_FORMAT_XRGB8888:
-               return GL_RGB8;
-       case MESA_FORMAT_RGB565:
-               return GL_RGB5;
-       default:
-               return GL_NONE;
-       }
-}
-
 static void
 nouveau_render_texture(struct gl_context *ctx, struct gl_framebuffer *fb,
                       struct gl_renderbuffer_attachment *att)
 {
        struct gl_renderbuffer *rb = att->Renderbuffer;
-       struct gl_texture_image *ti =
-               att->Texture->Image[att->CubeMapFace][att->TextureLevel];
-
-       /* Allocate a renderbuffer object for the texture if we
-        * haven't already done so. */
-       if (!rb) {
-               rb = nouveau_renderbuffer_new(ctx, ~0);
-               assert(rb);
-
-               rb->AllocStorage = NULL;
-               _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
-       }
+       struct gl_texture_image *ti = rb->TexImage;
 
        /* Update the renderbuffer fields from the texture. */
-       set_renderbuffer_format(rb, get_tex_format(ti));
-       rb->Width = ti->Width;
-       rb->Height = ti->Height;
        nouveau_surface_ref(&to_nouveau_teximage(ti)->surface,
                            &to_nouveau_renderbuffer(rb)->surface);
 
@@ -293,9 +263,9 @@ nouveau_render_texture(struct gl_context *ctx, struct gl_framebuffer *fb,
 
 static void
 nouveau_finish_render_texture(struct gl_context *ctx,
-                             struct gl_renderbuffer_attachment *att)
+                             struct gl_renderbuffer *rb)
 {
-       texture_dirty(att->Texture);
+       texture_dirty(rb->TexImage->TexObject);
 }
 
 void