i965/nir/vec4: Handle uniforms on vertex programs
[mesa.git] / src / mesa / drivers / dri / nouveau / nouveau_span.c
index 1bfdecc6a219b9ed14a993f37a2eff45f590618a..77a150773d12ba16f06959fa027f215b8c4973dd 100644 (file)
 #include "nouveau_driver.h"
 #include "nouveau_fbo.h"
 #include "nouveau_context.h"
-#include "nouveau_bo.h"
 
 #include "swrast/swrast.h"
+#include "swrast/s_context.h"
 
-#define LOCAL_VARS                                                     \
-       struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface; \
-       GLuint p;                                                       \
-       (void)p;
 
-#define LOCAL_DEPTH_VARS LOCAL_VARS
-
-#define HW_LOCK()
-#define HW_UNLOCK()
-
-#define HW_CLIPLOOP() {                                                        \
-       int minx = 0;                                                   \
-       int miny = 0;                                                   \
-       int maxx = rb->Width;                                           \
-       int maxy = rb->Height;
-
-#define HW_ENDCLIPLOOP() }
-
-#define Y_FLIP(y) (rb->Name ? (y) : rb->Height - 1 - (y))
-
-/* RGB565 span functions */
-#define SPANTMP_PIXEL_FMT GL_RGB
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5
-#define TAG(x) nouveau_##x##_rgb565
-#define TAG2(x, y) nouveau_##x##_rgb565##y
-#define GET_PTR(x, y) (s->bo->map + (y)*s->pitch + (x)*s->cpp)
-
-#include "spantmp2.h"
-
-/* RGB888 span functions */
-#define SPANTMP_PIXEL_FMT GL_BGR
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-#define TAG(x) nouveau_##x##_rgb888
-#define TAG2(x, y) nouveau_##x##_rgb888##y
-#define GET_PTR(x, y) (s->bo->map + (y)*s->pitch + (x)*s->cpp)
-
-#include "spantmp2.h"
-
-/* ARGB8888 span functions */
-#define SPANTMP_PIXEL_FMT GL_BGRA
-#define SPANTMP_PIXEL_TYPE GL_UNSIGNED_INT_8_8_8_8_REV
-#define TAG(x) nouveau_##x##_argb8888
-#define TAG2(x, y) nouveau_##x##_argb8888##y
-#define GET_PTR(x, y) (s->bo->map + (y)*s->pitch + (x)*s->cpp)
-
-#include "spantmp2.h"
-
-/* Z16 span functions */
-#define VALUE_TYPE uint16_t
-#define READ_DEPTH(v, x, y)                                            \
-       v = *(uint16_t *)(s->bo->map + (y)*s->pitch + (x)*s->cpp);
-#define WRITE_DEPTH(x, y, v)                                           \
-       *(uint16_t *)(s->bo->map + (y)*s->pitch + (x)*s->cpp) = v
-#define TAG(x) nouveau_##x##_z16
-
-#include "depthtmp.h"
-
-/* Z24S8 span functions */
-#define VALUE_TYPE uint32_t
-#define READ_DEPTH(v, x, y)                                            \
-       v = *(uint32_t *)(s->bo->map + (y)*s->pitch + (x)*s->cpp);
-#define WRITE_DEPTH(x, y, v)                                           \
-       *(uint32_t *)(s->bo->map + (y)*s->pitch + (x)*s->cpp) = v
-#define TAG(x) nouveau_##x##_z24s8
-
-#include "depthtmp.h"
 
 static void
-renderbuffer_map_unmap(struct gl_renderbuffer *rb, GLboolean map)
+renderbuffer_map_unmap(struct gl_context *ctx, struct gl_renderbuffer *rb,
+                      GLboolean map)
 {
        struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface;
 
-       if (map) {
-               switch (rb->Format) {
-               case MESA_FORMAT_RGB565:
-                       nouveau_InitPointers_rgb565(rb);
-                       break;
-               case MESA_FORMAT_XRGB8888:
-                       nouveau_InitPointers_rgb888(rb);
-                       break;
-               case MESA_FORMAT_ARGB8888:
-                       nouveau_InitPointers_argb8888(rb);
-                       break;
-               case MESA_FORMAT_Z16:
-                       nouveau_InitDepthPointers_z16(rb);
-                       break;
-               case MESA_FORMAT_Z24_S8:
-                       nouveau_InitDepthPointers_z24s8(rb);
-                       break;
-               default:
-                       assert(0);
-               }
-
-               nouveau_bo_map(s->bo, NOUVEAU_BO_RDWR);
-       } else {
-               nouveau_bo_unmap(s->bo);
-       }
-}
-
-static void
-texture_unit_map_unmap(GLcontext *ctx, struct gl_texture_unit *u, GLboolean map)
-{
-       if (!u->_ReallyEnabled)
-               return;
-
        if (map)
-               ctx->Driver.MapTexture(ctx, u->_Current);
-       else
-               ctx->Driver.UnmapTexture(ctx, u->_Current);
+               nouveau_bo_map(s->bo, NOUVEAU_BO_RDWR, context_client(ctx));
 }
 
 static void
-framebuffer_map_unmap(struct gl_framebuffer *fb, GLboolean map)
+framebuffer_map_unmap(struct gl_context *ctx, struct gl_framebuffer *fb, GLboolean map)
 {
        int i;
 
        for (i = 0; i < fb->_NumColorDrawBuffers; i++)
-               renderbuffer_map_unmap(fb->_ColorDrawBuffers[i], map);
+               renderbuffer_map_unmap(ctx, fb->_ColorDrawBuffers[i], map);
 
-       renderbuffer_map_unmap(fb->_ColorReadBuffer, map);
+       renderbuffer_map_unmap(ctx, fb->_ColorReadBuffer, map);
 
-       if (fb->_DepthBuffer)
-               renderbuffer_map_unmap(fb->_DepthBuffer->Wrapped, map);
+       if (fb->Attachment[BUFFER_DEPTH].Renderbuffer)
+               renderbuffer_map_unmap(ctx, fb->Attachment[BUFFER_DEPTH].Renderbuffer, map);
 }
 
 static void
-span_map_unmap(GLcontext *ctx, GLboolean map)
+span_map_unmap(struct gl_context *ctx, GLboolean map)
 {
        int i;
 
-       framebuffer_map_unmap(ctx->DrawBuffer, map);
+       framebuffer_map_unmap(ctx, ctx->DrawBuffer, map);
 
        if (ctx->ReadBuffer != ctx->DrawBuffer)
-               framebuffer_map_unmap(ctx->ReadBuffer, map);
+               framebuffer_map_unmap(ctx, ctx->ReadBuffer, map);
 
        for (i = 0; i < ctx->Const.MaxTextureUnits; i++)
-               texture_unit_map_unmap(ctx, &ctx->Texture.Unit[i], map);
+               if (map)
+                       _swrast_map_texture(ctx, ctx->Texture.Unit[i]._Current);
+               else
+                       _swrast_unmap_texture(ctx, ctx->Texture.Unit[i]._Current);
 }
 
 static void
-nouveau_span_start(GLcontext *ctx)
+nouveau_span_start(struct gl_context *ctx)
 {
        nouveau_fallback(ctx, SWRAST);
        span_map_unmap(ctx, GL_TRUE);
 }
 
 static void
-nouveau_span_finish(GLcontext *ctx)
+nouveau_span_finish(struct gl_context *ctx)
 {
        span_map_unmap(ctx, GL_FALSE);
        nouveau_fallback(ctx, HWTNL);
 }
 
 void
-nouveau_span_functions_init(GLcontext *ctx)
+nouveau_span_functions_init(struct gl_context *ctx)
 {
        struct swrast_device_driver *swdd =
                _swrast_GetDeviceDriverReference(ctx);