Merge branch 'arb_half_float_vertex'
[mesa.git] / src / mesa / drivers / dri / ffb / ffb_dd.c
1 /*
2 *
3 * GLX Hardware Device Driver for Sun Creator/Creator3D
4 * Copyright (C) 2000, 2001 David S. Miller
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * DAVID MILLER, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
22 * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 *
25 * David S. Miller <davem@redhat.com>
26 */
27
28 #include "main/mtypes.h"
29 #include "main/mm.h"
30 #include "ffb_dd.h"
31 #include "ffb_span.h"
32 #include "ffb_context.h"
33 #include "ffb_clear.h"
34 #include "ffb_lock.h"
35
36 #define FFB_DATE "20021125"
37
38 PUBLIC const char __driConfigOptions[] = { 0 };
39 const GLuint __driNConfigOptions = 0;
40
41 /* Mesa's Driver Functions */
42
43 static const GLubyte *ffbDDGetString(GLcontext *ctx, GLenum name)
44 {
45 ffbContextPtr fmesa = FFB_CONTEXT(ctx);
46 static char buffer[128];
47
48 switch (name) {
49 case GL_VENDOR:
50 return (GLubyte *) "David S. Miller";
51
52 case GL_RENDERER:
53 sprintf(buffer, "Mesa DRI FFB " FFB_DATE);
54
55 if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2)
56 strncat(buffer, " FFB2", 5);
57 if (fmesa->ffb_sarea->flags & FFB_DRI_FFB2PLUS)
58 strncat(buffer, " FFB2PLUS", 9);
59 if (fmesa->ffb_sarea->flags & FFB_DRI_PAC1)
60 strncat(buffer, " PAC1", 5);
61 if (fmesa->ffb_sarea->flags & FFB_DRI_PAC2)
62 strncat(buffer, " PAC2", 5);
63
64 #ifdef USE_SPARC_ASM
65 strncat(buffer, " Sparc", 6);
66 #endif
67
68 return (GLubyte *) buffer;
69
70 default:
71 return NULL;
72 };
73 }
74
75
76 static void ffbBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
77 {
78 GET_CURRENT_CONTEXT(ctx);
79 ffbContextPtr fmesa = FFB_CONTEXT(ctx);
80
81 LOCK_HARDWARE(fmesa);
82 *width = fmesa->driDrawable->w;
83 *height = fmesa->driDrawable->h;
84 UNLOCK_HARDWARE(fmesa);
85 }
86
87 void ffbDDExtensionsInit(GLcontext *ctx)
88 {
89 /* Nothing for now until we start to add
90 * real acceleration. -DaveM
91 */
92
93 /* XXX Need to turn off GL_EXT_blend_func_separate for one.
94 * XXX Also BlendEquation should be turned off too, what
95 * XXX EXT is that assosciated with?
96 */
97 }
98
99 static void ffbDDFinish(GLcontext *ctx)
100 {
101 ffbContextPtr fmesa = FFB_CONTEXT(ctx);
102
103 LOCK_HARDWARE(fmesa);
104 FFBWait(fmesa, fmesa->regs);
105 UNLOCK_HARDWARE(fmesa);
106 }
107
108 void ffbDDInitDriverFuncs(GLcontext *ctx)
109 {
110 ctx->Driver.GetBufferSize = ffbBufferSize;
111 ctx->Driver.GetString = ffbDDGetString;
112 ctx->Driver.Clear = ffbDDClear;
113
114 ctx->Driver.Finish = ffbDDFinish;
115 }