Merge branch 'master' of git+ssh://pmandin@git.freedesktop.org/git/mesa/mesa
This commit is contained in:
@@ -372,6 +372,8 @@ DEMO_FILES = \
|
||||
$(DIRECTORY)/progs/demos/*.cxx \
|
||||
$(DIRECTORY)/progs/demos/*.dat \
|
||||
$(DIRECTORY)/progs/demos/README \
|
||||
$(DIRECTORY)/progs/fbdev/Makefile \
|
||||
$(DIRECTORY)/progs/fbdev/glfbdevtest.c \
|
||||
$(DIRECTORY)/progs/osdemos/Makefile \
|
||||
$(DIRECTORY)/progs/osdemos/*.c \
|
||||
$(DIRECTORY)/progs/xdemos/Makefile* \
|
||||
|
||||
@@ -1053,6 +1053,7 @@ main (int argc, char *argv[])
|
||||
else
|
||||
file = argv[1];
|
||||
|
||||
glutInit(&argc, argv);
|
||||
glutInitWindowPosition (0, 0);
|
||||
glutInitWindowSize(640,480);
|
||||
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
|
||||
|
||||
@@ -569,6 +569,7 @@ main(int ac, char **av)
|
||||
if (ac == 2)
|
||||
frontbuffer = 0;
|
||||
|
||||
glutInit(&ac, av);
|
||||
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
|
||||
glutInitWindowPosition(0, 0);
|
||||
glutInitWindowSize(640, 480);
|
||||
|
||||
@@ -1042,6 +1042,7 @@ int main(int argc, char **argv)
|
||||
|
||||
read_surface( "isosurf.dat" );
|
||||
|
||||
glutInit( &argc, argv);
|
||||
glutInitWindowPosition(0, 0);
|
||||
glutInitWindowSize(400, 400);
|
||||
|
||||
|
||||
@@ -826,7 +826,7 @@ static void pinit(void)
|
||||
|
||||
}
|
||||
|
||||
static void INIT(void)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
printf("Morph 3D - Shows morphing platonic polyhedra\n");
|
||||
printf("Author: Marcelo Fernandes Vianna (vianna@cat.cbpf.br)\n\n");
|
||||
@@ -841,6 +841,7 @@ static void INIT(void)
|
||||
|
||||
object=1;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
glutInitWindowPosition(0,0);
|
||||
glutInitWindowSize(640,480);
|
||||
|
||||
@@ -888,9 +889,3 @@ static void INIT(void)
|
||||
glutMainLoop();
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
INIT();
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -100,6 +100,7 @@ static void init( void )
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
glutInit(&argc, argv);
|
||||
glutInitWindowPosition(0, 0);
|
||||
glutInitWindowSize(500, 500);
|
||||
glutInitDisplayMode( GLUT_RGB );
|
||||
|
||||
+90
-15
@@ -23,11 +23,21 @@
|
||||
#include <GL/glfbdev.h>
|
||||
#include <math.h>
|
||||
|
||||
#define DEFAULT_DEPTH 8
|
||||
|
||||
/**
|
||||
* Choose one of these modes
|
||||
*/
|
||||
/*static const int XRes = 1280, YRes = 1024, Hz = 75;*/
|
||||
/*static const int XRes = 1280, YRes = 1024, Hz = 70;*/
|
||||
/*static const int XRes = 1280, YRes = 1024, Hz = 60;*/
|
||||
static const int XRes = 1024, YRes = 768, Hz = 70;
|
||||
|
||||
static int DesiredDepth = 32;
|
||||
|
||||
static int NumFrames = 100;
|
||||
|
||||
static struct fb_fix_screeninfo FixedInfo;
|
||||
static struct fb_var_screeninfo VarInfo, OrigVarInfo;
|
||||
static int DesiredDepth = 0;
|
||||
static int OriginalVT = -1;
|
||||
static int ConsoleFD = -1;
|
||||
static int FrameBufferFD = -1;
|
||||
@@ -227,7 +237,6 @@ initialize_fbdev( void )
|
||||
VarInfo = OrigVarInfo;
|
||||
|
||||
/* set the depth, resolution, etc */
|
||||
DesiredDepth = 32;
|
||||
if (DesiredDepth)
|
||||
VarInfo.bits_per_pixel = DesiredDepth;
|
||||
|
||||
@@ -251,16 +260,60 @@ initialize_fbdev( void )
|
||||
VarInfo.blue.length = 8;
|
||||
VarInfo.transp.length = 8;
|
||||
}
|
||||
/* timing values taken from /etc/fb.modes (1280x1024 @ 75Hz) */
|
||||
VarInfo.xres_virtual = VarInfo.xres = 1280;
|
||||
VarInfo.yres_virtual = VarInfo.yres = 1024;
|
||||
VarInfo.pixclock = 7408;
|
||||
VarInfo.left_margin = 248;
|
||||
VarInfo.right_margin = 16;
|
||||
VarInfo.upper_margin = 38;
|
||||
VarInfo.lower_margin = 1;
|
||||
VarInfo.hsync_len = 144;
|
||||
VarInfo.vsync_len = 3;
|
||||
|
||||
/* timing values taken from /etc/fb.modes */
|
||||
if (XRes == 1280 && YRes == 1024) {
|
||||
VarInfo.xres_virtual = VarInfo.xres = XRes;
|
||||
VarInfo.yres_virtual = VarInfo.yres = YRes;
|
||||
if (Hz == 75) {
|
||||
VarInfo.pixclock = 7408;
|
||||
VarInfo.left_margin = 248;
|
||||
VarInfo.right_margin = 16;
|
||||
VarInfo.upper_margin = 38;
|
||||
VarInfo.lower_margin = 1;
|
||||
VarInfo.hsync_len = 144;
|
||||
VarInfo.vsync_len = 3;
|
||||
}
|
||||
else if (Hz == 70) {
|
||||
VarInfo.pixclock = 7937;
|
||||
VarInfo.left_margin = 216;
|
||||
VarInfo.right_margin = 80;
|
||||
VarInfo.upper_margin = 36;
|
||||
VarInfo.lower_margin = 1;
|
||||
VarInfo.hsync_len = 112;
|
||||
VarInfo.vsync_len = 5;
|
||||
}
|
||||
else if (Hz == 60) {
|
||||
VarInfo.pixclock = 9260;
|
||||
VarInfo.left_margin = 248;
|
||||
VarInfo.right_margin = 48;
|
||||
VarInfo.upper_margin = 38;
|
||||
VarInfo.lower_margin = 1;
|
||||
VarInfo.hsync_len = 112;
|
||||
VarInfo.vsync_len = 3;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "invalid rate for 1280x1024\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
else if (XRes == 1024 && YRes == 768 && Hz == 70) {
|
||||
VarInfo.xres_virtual = VarInfo.xres = XRes;
|
||||
VarInfo.yres_virtual = VarInfo.yres = YRes;
|
||||
if (Hz == 70) {
|
||||
VarInfo.pixclock = 13334;
|
||||
VarInfo.left_margin = 144;
|
||||
VarInfo.right_margin = 24;
|
||||
VarInfo.upper_margin = 29;
|
||||
VarInfo.lower_margin = 3;
|
||||
VarInfo.hsync_len = 136;
|
||||
VarInfo.vsync_len = 6;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "invalid rate for 1024x768\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
VarInfo.xoffset = 0;
|
||||
VarInfo.yoffset = 0;
|
||||
@@ -338,7 +391,7 @@ initialize_fbdev( void )
|
||||
printf("MMIOAddress = %p\n", MMIOAddress);
|
||||
|
||||
/* try out some simple MMIO register reads */
|
||||
if (1)
|
||||
if (0)
|
||||
{
|
||||
typedef unsigned int CARD32;
|
||||
typedef unsigned char CARD8;
|
||||
@@ -452,6 +505,7 @@ gltest( void )
|
||||
GLFBDevVisualPtr vis;
|
||||
int bytes, r, g, b, a;
|
||||
float ang;
|
||||
int i;
|
||||
|
||||
printf("GLFBDEV_VENDOR = %s\n", glFBDevGetString(GLFBDEV_VENDOR));
|
||||
printf("GLFBDEV_VERSION = %s\n", glFBDevGetString(GLFBDEV_VERSION));
|
||||
@@ -491,13 +545,17 @@ gltest( void )
|
||||
glEnable(GL_LIGHT0);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
for (ang = 0; ang <= 180; ang += 15) {
|
||||
printf("Drawing %d frames...\n", NumFrames);
|
||||
|
||||
ang = 0.0;
|
||||
for (i = 0; i < NumFrames; i++) {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glPushMatrix();
|
||||
glRotatef(ang, 1, 0, 0);
|
||||
doughnut(1, 3, 40, 20);
|
||||
glPopMatrix();
|
||||
glFBDevSwapBuffers(buf);
|
||||
ang += 15.0;
|
||||
}
|
||||
|
||||
/* clean up */
|
||||
@@ -510,12 +568,29 @@ gltest( void )
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
parse_args(int argc, char *argv[])
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-f") == 0) {
|
||||
NumFrames = atoi(argv[i+1]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main( int argc, char *argv[] )
|
||||
{
|
||||
signal(SIGUSR1, signal_handler); /* exit if someone tries a vt switch */
|
||||
signal(SIGSEGV, signal_handler); /* catch segfaults */
|
||||
|
||||
parse_args(argc, argv);
|
||||
|
||||
printf("Setting mode to %d x %d @ %d Hz, %d bpp\n", XRes, YRes, Hz, DesiredDepth);
|
||||
initialize_fbdev();
|
||||
gltest();
|
||||
shutdown_fbdev();
|
||||
|
||||
@@ -28,14 +28,13 @@
|
||||
typedef void (GLUTCALLBACK *__GlutTimerCallback) ( int value );
|
||||
|
||||
typedef struct __GlutTimer_s {
|
||||
unsigned int interval;
|
||||
struct timeval interval;
|
||||
struct timeval expire;
|
||||
|
||||
__GlutTimerCallback func;
|
||||
int value;
|
||||
|
||||
struct __GlutTimer_s *next;
|
||||
struct __GlutTimer_s *prev;
|
||||
} __GlutTimer;
|
||||
|
||||
/*****************************************************************************/
|
||||
@@ -207,8 +206,7 @@ glutIdleFunc( void (GLUTCALLBACK *func) (void) )
|
||||
void GLUTAPIENTRY
|
||||
glutTimerFunc( unsigned int msec, void (GLUTCALLBACK *func) (int value), int value )
|
||||
{
|
||||
__GlutTimer *timer;
|
||||
struct timeval now;
|
||||
__GlutTimer *timer;
|
||||
|
||||
if (!func)
|
||||
return;
|
||||
@@ -217,24 +215,19 @@ glutTimerFunc( unsigned int msec, void (GLUTCALLBACK *func) (int value), int val
|
||||
if (!timer)
|
||||
__glutFatalError( "out of memory" );
|
||||
|
||||
gettimeofday( &now, NULL );
|
||||
|
||||
timer->interval = msec;
|
||||
timer->expire.tv_sec = now.tv_sec + (now.tv_usec/1000 + msec) / 1000;
|
||||
timer->expire.tv_usec = (now.tv_usec + msec*1000) % 1000000;
|
||||
timer->interval.tv_sec = msec / 1000;
|
||||
timer->interval.tv_usec = (msec % 1000) * 1000;
|
||||
|
||||
gettimeofday( &timer->expire, NULL );
|
||||
timer->expire.tv_usec += timer->interval.tv_usec;
|
||||
timer->expire.tv_sec += timer->interval.tv_sec + timer->expire.tv_usec/1000000;
|
||||
timer->expire.tv_usec %= 1000000;
|
||||
|
||||
timer->func = func;
|
||||
timer->value = value;
|
||||
|
||||
if (g_timers) {
|
||||
timer->prev = g_timers->prev;
|
||||
g_timers->prev->next = timer;
|
||||
g_timers->prev = timer;
|
||||
}
|
||||
else {
|
||||
g_timers = timer;
|
||||
g_timers->prev = timer;
|
||||
}
|
||||
timer->next = g_timers;
|
||||
g_timers = timer;
|
||||
}
|
||||
|
||||
|
||||
@@ -254,12 +247,41 @@ __glutHandleTimers( void )
|
||||
g_idle = GL_FALSE;
|
||||
|
||||
cur->func( cur->value );
|
||||
|
||||
cur->expire.tv_sec += (cur->expire.tv_usec/1000 + cur->interval) / 1000;
|
||||
cur->expire.tv_usec = (cur->expire.tv_usec + cur->interval*1000) % 1000000;
|
||||
|
||||
cur->expire.tv_usec += cur->interval.tv_usec;
|
||||
cur->expire.tv_sec += cur->interval.tv_sec + cur->expire.tv_usec/1000000;
|
||||
cur->expire.tv_usec %= 1000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
GLboolean
|
||||
__glutGetTimeout( int *ret_msec )
|
||||
{
|
||||
__GlutTimer *cur;
|
||||
struct timeval *time = NULL;
|
||||
struct timeval now;
|
||||
|
||||
for (cur = g_timers; cur; cur = cur->next) {
|
||||
if (time == NULL ||
|
||||
time->tv_sec > cur->expire.tv_sec ||
|
||||
(time->tv_sec == cur->expire.tv_sec &&
|
||||
time->tv_usec > cur->expire.tv_usec)) {
|
||||
time = &cur->expire;
|
||||
}
|
||||
}
|
||||
|
||||
if (time == NULL)
|
||||
return GL_FALSE;
|
||||
|
||||
gettimeofday( &now, NULL );
|
||||
|
||||
*ret_msec = (time->tv_sec - now.tv_sec) * 1000 +
|
||||
(time->tv_usec - now.tv_usec + 500) / 1000;
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
@@ -275,4 +297,4 @@ __glutFreeTimers( void )
|
||||
|
||||
g_timers = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -435,13 +435,14 @@ glutMainLoop( void )
|
||||
{
|
||||
__glutAssert( events != NULL );
|
||||
|
||||
__glutHandleWindows();
|
||||
|
||||
while (GL_TRUE) {
|
||||
DFBEvent evt, prev;
|
||||
|
||||
g_idle = GL_TRUE;
|
||||
|
||||
__glutHandleTimers();
|
||||
__glutHandleWindows();
|
||||
|
||||
prev.clazz = DFEC_NONE;
|
||||
|
||||
@@ -471,13 +472,19 @@ glutMainLoop( void )
|
||||
__glutHandleTimers();
|
||||
}
|
||||
|
||||
__glutHandleWindows();
|
||||
|
||||
if (g_idle) {
|
||||
if (idle_func) {
|
||||
idle_func();
|
||||
}
|
||||
else {
|
||||
int msec;
|
||||
__glutSetWindow( NULL );
|
||||
usleep( 500 );
|
||||
if (__glutGetTimeout( &msec ))
|
||||
events->WaitForEventWithTimeout( events, msec/1000, msec%1000 );
|
||||
else
|
||||
events->WaitForEvent( events );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,6 +124,7 @@ extern void __glutDestroyWindow( __GlutWindow *window );
|
||||
extern void __glutDestroyWindows( void );
|
||||
/* callback.c */
|
||||
extern void __glutHandleTimers( void );
|
||||
extern GLboolean __glutGetTimeout( int *ret_msec );
|
||||
extern void __glutFreeTimers( void );
|
||||
|
||||
|
||||
|
||||
@@ -134,7 +134,6 @@ static bool directfbgl_init_visual ( GLvisual *visual,
|
||||
static bool directfbgl_create_context ( GLcontext *context,
|
||||
GLframebuffer *framebuffer,
|
||||
GLvisual *visual,
|
||||
DFBSurfacePixelFormat format,
|
||||
IDirectFBGL_data *data );
|
||||
static void directfbgl_destroy_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer );
|
||||
@@ -340,8 +339,9 @@ Construct( IDirectFBGL *thiz, IDirectFBSurface *surface )
|
||||
}
|
||||
|
||||
/* Create context. */
|
||||
if (!directfbgl_create_context( &data->context, &data->framebuffer,
|
||||
&data->visual, data->format, data )) {
|
||||
if (!directfbgl_create_context( &data->context,
|
||||
&data->framebuffer,
|
||||
&data->visual, data )) {
|
||||
D_ERROR( "DirectFBGL/Mesa: failed to create context.\n" );
|
||||
IDirectFBGL_Mesa_Destruct( thiz );
|
||||
return DFB_UNSUPPORTED;
|
||||
@@ -762,11 +762,10 @@ directfbgl_init_visual( GLvisual *visual,
|
||||
}
|
||||
|
||||
static bool
|
||||
directfbgl_create_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer,
|
||||
GLvisual *visual,
|
||||
DFBSurfacePixelFormat format,
|
||||
IDirectFBGL_data *data )
|
||||
directfbgl_create_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer,
|
||||
GLvisual *visual,
|
||||
IDirectFBGL_data *data )
|
||||
{
|
||||
struct dd_function_table functions;
|
||||
|
||||
@@ -800,7 +799,7 @@ directfbgl_create_context( GLcontext *context,
|
||||
data->render.Delete = dfbDeleteRenderbuffer;
|
||||
data->render.AllocStorage = dfbRenderbufferStorage;
|
||||
|
||||
switch (format) {
|
||||
switch (data->format) {
|
||||
case DSPF_RGB332:
|
||||
data->render.GetRow = get_row_RGB332;
|
||||
data->render.GetValues = get_values_RGB332;
|
||||
@@ -887,6 +886,9 @@ directfbgl_create_context( GLcontext *context,
|
||||
return false;
|
||||
}
|
||||
|
||||
data->render.Width = data->width;
|
||||
data->render.Height = data->height;
|
||||
|
||||
_mesa_add_renderbuffer( framebuffer, BUFFER_FRONT_LEFT, &data->render );
|
||||
|
||||
_mesa_add_soft_renderbuffers( framebuffer,
|
||||
@@ -908,8 +910,11 @@ static void
|
||||
directfbgl_destroy_context( GLcontext *context,
|
||||
GLframebuffer *framebuffer )
|
||||
{
|
||||
_mesa_free_framebuffer_data( framebuffer );
|
||||
_mesa_notifyDestroy( context );
|
||||
_swsetup_DestroyContext( context );
|
||||
_swrast_DestroyContext( context );
|
||||
_tnl_DestroyContext( context );
|
||||
_vbo_DestroyContext( context );
|
||||
//_mesa_free_framebuffer_data( framebuffer );
|
||||
_mesa_free_context_data( context );
|
||||
}
|
||||
|
||||
|
||||
@@ -532,12 +532,15 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
|
||||
GLuint dst_offset,
|
||||
GLboolean dst_tiled,
|
||||
GLshort x, GLshort y,
|
||||
GLshort w, GLshort h)
|
||||
GLshort w, GLshort h,
|
||||
GLenum logic_op)
|
||||
{
|
||||
struct xy_setup_blit setup;
|
||||
struct xy_text_immediate_blit text;
|
||||
int dwords = ((src_size + 7) & ~7) / 4;
|
||||
|
||||
assert( logic_op - GL_CLEAR >= 0 );
|
||||
assert( logic_op - GL_CLEAR < 0x10 );
|
||||
|
||||
if (w < 0 || h < 0)
|
||||
return;
|
||||
@@ -561,7 +564,7 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
|
||||
setup.br0.length = (sizeof(setup) / sizeof(int)) - 2;
|
||||
|
||||
setup.br13.dest_pitch = dst_pitch;
|
||||
setup.br13.rop = 0xcc;
|
||||
setup.br13.rop = translate_raster_op(logic_op);
|
||||
setup.br13.color_depth = (cpp == 4) ? BR13_8888 : BR13_565;
|
||||
setup.br13.clipping_enable = 0;
|
||||
setup.br13.mono_source_transparency = 1;
|
||||
|
||||
@@ -72,6 +72,7 @@ intelEmitImmediateColorExpandBlit(struct intel_context *intel,
|
||||
GLuint dst_offset,
|
||||
GLboolean dst_tiled,
|
||||
GLshort dst_x, GLshort dst_y,
|
||||
GLshort w, GLshort h);
|
||||
GLshort w, GLshort h,
|
||||
GLenum logic_op );
|
||||
|
||||
#endif
|
||||
|
||||
@@ -260,7 +260,9 @@ do_blit_bitmap( GLcontext *ctx,
|
||||
int h = MIN2(DY, box_h - py);
|
||||
int w = MIN2(DX, box_w - px);
|
||||
GLuint sz = align(align(w,8) * h, 64)/8;
|
||||
|
||||
GLenum logic_op = ctx->Color.ColorLogicOpEnabled ?
|
||||
ctx->Color.LogicOp : GL_COPY;
|
||||
|
||||
assert(sz <= sizeof(stipple));
|
||||
memset(stipple, 0, sz);
|
||||
|
||||
@@ -288,7 +290,8 @@ do_blit_bitmap( GLcontext *ctx,
|
||||
dst->tiled,
|
||||
rect.x1 + px,
|
||||
rect.y2 - (py + h),
|
||||
w, h);
|
||||
w, h,
|
||||
logic_op);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@ DRIVER_SOURCES = \
|
||||
r300_fragprog.c \
|
||||
r300_shader.c \
|
||||
r300_emit.c \
|
||||
r300_swtcl.c \
|
||||
$(EGL_SOURCES)
|
||||
|
||||
C_SOURCES = $(COMMON_SOURCES) $(DRIVER_SOURCES)
|
||||
|
||||
@@ -321,8 +321,12 @@ void r300InitCmdBuf(r300ContextPtr r300)
|
||||
r300->hw.unk221C.cmd[0] = cmdpacket0(R300_VAP_UNKNOWN_221C, 1);
|
||||
ALLOC_STATE(vap_clip, always, 5, 0);
|
||||
r300->hw.vap_clip.cmd[0] = cmdpacket0(R300_VAP_CLIP_X_0, 4);
|
||||
ALLOC_STATE(unk2288, always, 2, 0);
|
||||
r300->hw.unk2288.cmd[0] = cmdpacket0(R300_VAP_UNKNOWN_2288, 1);
|
||||
|
||||
if (has_tcl) {
|
||||
ALLOC_STATE(unk2288, always, 2, 0);
|
||||
r300->hw.unk2288.cmd[0] = cmdpacket0(R300_VAP_UNKNOWN_2288, 1);
|
||||
}
|
||||
|
||||
ALLOC_STATE(vof, always, R300_VOF_CMDSIZE, 0);
|
||||
r300->hw.vof.cmd[R300_VOF_CMD_0] =
|
||||
cmdpacket0(R300_VAP_OUTPUT_VTX_FMT_0, 2);
|
||||
|
||||
@@ -63,6 +63,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include "r300_ioctl.h"
|
||||
#include "r300_tex.h"
|
||||
#include "r300_emit.h"
|
||||
#include "r300_swtcl.h"
|
||||
|
||||
#ifdef USER_BUFFERS
|
||||
#include "r300_mem.h"
|
||||
@@ -317,15 +318,17 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
|
||||
_tnl_allow_vertex_fog(ctx, GL_TRUE);
|
||||
|
||||
/* currently bogus data */
|
||||
ctx->Const.VertexProgram.MaxInstructions = VSF_MAX_FRAGMENT_LENGTH / 4;
|
||||
ctx->Const.VertexProgram.MaxNativeInstructions =
|
||||
VSF_MAX_FRAGMENT_LENGTH / 4;
|
||||
ctx->Const.VertexProgram.MaxNativeAttribs = 16; /* r420 */
|
||||
ctx->Const.VertexProgram.MaxTemps = 32;
|
||||
ctx->Const.VertexProgram.MaxNativeTemps =
|
||||
/*VSF_MAX_FRAGMENT_TEMPS */ 32;
|
||||
ctx->Const.VertexProgram.MaxNativeParameters = 256; /* r420 */
|
||||
ctx->Const.VertexProgram.MaxNativeAddressRegs = 1;
|
||||
if (screen->chip_flags & RADEON_CHIPSET_TCL) {
|
||||
ctx->Const.VertexProgram.MaxInstructions = VSF_MAX_FRAGMENT_LENGTH / 4;
|
||||
ctx->Const.VertexProgram.MaxNativeInstructions =
|
||||
VSF_MAX_FRAGMENT_LENGTH / 4;
|
||||
ctx->Const.VertexProgram.MaxNativeAttribs = 16; /* r420 */
|
||||
ctx->Const.VertexProgram.MaxTemps = 32;
|
||||
ctx->Const.VertexProgram.MaxNativeTemps =
|
||||
/*VSF_MAX_FRAGMENT_TEMPS */ 32;
|
||||
ctx->Const.VertexProgram.MaxNativeParameters = 256; /* r420 */
|
||||
ctx->Const.VertexProgram.MaxNativeAddressRegs = 1;
|
||||
}
|
||||
|
||||
ctx->Const.FragmentProgram.MaxNativeTemps = PFS_NUM_TEMP_REGS;
|
||||
ctx->Const.FragmentProgram.MaxNativeAttribs = 11; /* copy i915... */
|
||||
@@ -363,6 +366,8 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
|
||||
radeonInitSpanFuncs(ctx);
|
||||
r300InitCmdBuf(r300);
|
||||
r300InitState(r300);
|
||||
if (!(screen->chip_flags & RADEON_CHIPSET_TCL))
|
||||
r300InitSwtcl(ctx);
|
||||
|
||||
TNL_CONTEXT(ctx)->Driver.RunPipeline = _tnl_run_pipeline;
|
||||
|
||||
|
||||
@@ -587,6 +587,11 @@ struct r300_vertex_shader_state {
|
||||
|
||||
extern int hw_tcl_on;
|
||||
|
||||
#define COLOR_IS_RGBA
|
||||
#define TAG(x) r300##x
|
||||
#include "tnl_dd/t_dd_vertex.h"
|
||||
#undef TAG
|
||||
|
||||
//#define CURRENT_VERTEX_SHADER(ctx) (ctx->VertexProgram._Current)
|
||||
#define CURRENT_VERTEX_SHADER(ctx) (R300_CONTEXT(ctx)->selected_vp)
|
||||
|
||||
@@ -783,7 +788,8 @@ struct r300_state {
|
||||
GLuint *Elts;
|
||||
struct r300_dma_region elt_dma;
|
||||
|
||||
DECLARE_RENDERINPUTS(render_inputs_bitset); /* actual render inputs that R300 was configured for.
|
||||
struct r300_dma_region swtcl_dma;
|
||||
DECLARE_RENDERINPUTS(render_inputs_bitset); /* actual render inputs that R300 was configured for.
|
||||
They are the same as tnl->render_inputs for fixed pipeline */
|
||||
|
||||
struct r300_stencilbuffer_state stencil;
|
||||
@@ -794,6 +800,62 @@ struct r300_state {
|
||||
#define R300_FALLBACK_TCL 1
|
||||
#define R300_FALLBACK_RAST 2
|
||||
|
||||
/* r300_swtcl.c
|
||||
*/
|
||||
struct r300_swtcl_info {
|
||||
GLuint RenderIndex;
|
||||
|
||||
/**
|
||||
* Size of a hardware vertex. This is calculated when \c ::vertex_attrs is
|
||||
* installed in the Mesa state vector.
|
||||
*/
|
||||
GLuint vertex_size;
|
||||
|
||||
/**
|
||||
* Attributes instructing the Mesa TCL pipeline where / how to put vertex
|
||||
* data in the hardware buffer.
|
||||
*/
|
||||
struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
|
||||
|
||||
/**
|
||||
* Number of elements of \c ::vertex_attrs that are actually used.
|
||||
*/
|
||||
GLuint vertex_attr_count;
|
||||
|
||||
/**
|
||||
* Cached pointer to the buffer where Mesa will store vertex data.
|
||||
*/
|
||||
GLubyte *verts;
|
||||
|
||||
/* Fallback rasterization functions
|
||||
*/
|
||||
// r200_point_func draw_point;
|
||||
// r200_line_func draw_line;
|
||||
// r200_tri_func draw_tri;
|
||||
|
||||
GLuint hw_primitive;
|
||||
GLenum render_primitive;
|
||||
GLuint numverts;
|
||||
|
||||
/**
|
||||
* Offset of the 4UB color data within a hardware (swtcl) vertex.
|
||||
*/
|
||||
GLuint coloroffset;
|
||||
|
||||
/**
|
||||
* Offset of the 3UB specular color data within a hardware (swtcl) vertex.
|
||||
*/
|
||||
GLuint specoffset;
|
||||
|
||||
/**
|
||||
* Should Mesa project vertex data or will the hardware do it?
|
||||
*/
|
||||
GLboolean needproj;
|
||||
|
||||
struct r300_dma_region indexed_verts;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* \brief R300 context structure.
|
||||
*/
|
||||
@@ -832,6 +894,9 @@ struct r300_context {
|
||||
GLvector4f *temp_attrib[_TNL_ATTRIB_MAX];
|
||||
|
||||
GLboolean disable_lowimpact_fallback;
|
||||
|
||||
DECLARE_RENDERINPUTS(tnl_index_bitset); /* index of bits for last tnl_install_attrs */
|
||||
struct r300_swtcl_info swtcl;
|
||||
};
|
||||
|
||||
struct r300_buffer_object {
|
||||
|
||||
@@ -217,14 +217,14 @@ static GLuint r300VAPInputRoute0(uint32_t * dst, GLvector4f ** attribptr,
|
||||
dw = R300_INPUT_ROUTE_FLOAT | (inputs[tab[i]] << 8) | (attribptr[tab[i]]->size - 1);
|
||||
dw |= (R300_INPUT_ROUTE_FLOAT | (inputs[tab[i + 1]] << 8) | (attribptr[tab[i + 1]]->size - 1)) << 16;
|
||||
if (i + 2 == nr) {
|
||||
dw |= (1 << (13 + 16));
|
||||
dw |= (R300_VAP_INPUT_ROUTE_END << 16);
|
||||
}
|
||||
dst[i >> 1] = dw;
|
||||
}
|
||||
|
||||
if (nr & 1) {
|
||||
dw = R300_INPUT_ROUTE_FLOAT | (inputs[tab[nr - 1]] << 8) | (attribptr[tab[nr - 1]]->size - 1);
|
||||
dw |= 1 << 13;
|
||||
dw |= R300_VAP_INPUT_ROUTE_END;
|
||||
dst[nr >> 1] = dw;
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ static GLuint r300VAPInputRoute1Swizzle(int swizzle[4])
|
||||
(swizzle[3] << R300_INPUT_ROUTE_W_SHIFT);
|
||||
}
|
||||
|
||||
static GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr)
|
||||
GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr)
|
||||
{
|
||||
GLuint i;
|
||||
|
||||
@@ -255,14 +255,14 @@ static GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr)
|
||||
return (nr + 1) >> 1;
|
||||
}
|
||||
|
||||
static GLuint r300VAPInputCntl0(GLcontext * ctx, GLuint InputsRead)
|
||||
GLuint r300VAPInputCntl0(GLcontext * ctx, GLuint InputsRead)
|
||||
{
|
||||
/* No idea what this value means. I have seen other values written to
|
||||
* this register... */
|
||||
return 0x5555;
|
||||
}
|
||||
|
||||
static GLuint r300VAPInputCntl1(GLcontext * ctx, GLuint InputsRead)
|
||||
GLuint r300VAPInputCntl1(GLcontext * ctx, GLuint InputsRead)
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
GLuint i, vic_1 = 0;
|
||||
@@ -286,7 +286,7 @@ static GLuint r300VAPInputCntl1(GLcontext * ctx, GLuint InputsRead)
|
||||
return vic_1;
|
||||
}
|
||||
|
||||
static GLuint r300VAPOutputCntl0(GLcontext * ctx, GLuint OutputsWritten)
|
||||
GLuint r300VAPOutputCntl0(GLcontext * ctx, GLuint OutputsWritten)
|
||||
{
|
||||
GLuint ret = 0;
|
||||
|
||||
@@ -315,7 +315,7 @@ static GLuint r300VAPOutputCntl0(GLcontext * ctx, GLuint OutputsWritten)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint OutputsWritten)
|
||||
GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint OutputsWritten)
|
||||
{
|
||||
GLuint i, ret = 0;
|
||||
|
||||
@@ -358,9 +358,11 @@ int r300EmitArrays(GLcontext * ctx)
|
||||
DECLARE_RENDERINPUTS(render_inputs_bitset);
|
||||
RENDERINPUTS_COPY(render_inputs_bitset, tnl->render_inputs_bitset);
|
||||
|
||||
vb->AttribPtr[VERT_ATTRIB_POS] = vb->ClipPtr;
|
||||
|
||||
assert(RENDERINPUTS_TEST(render_inputs_bitset, _TNL_ATTRIB_POS));
|
||||
assert(RENDERINPUTS_TEST(render_inputs_bitset, _TNL_ATTRIB_NORMAL) == 0);
|
||||
assert(RENDERINPUTS_TEST(render_inputs_bitset, _TNL_ATTRIB_COLOR0));
|
||||
//assert(RENDERINPUTS_TEST(render_inputs_bitset, _TNL_ATTRIB_COLOR0));
|
||||
|
||||
if (RENDERINPUTS_TEST(render_inputs_bitset, _TNL_ATTRIB_POS)) {
|
||||
InputsRead |= 1 << VERT_ATTRIB_POS;
|
||||
@@ -392,20 +394,18 @@ int r300EmitArrays(GLcontext * ctx)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
|
||||
/* Fixed, apply to vir0 only */
|
||||
memcpy(vir_inputs, inputs, VERT_ATTRIB_MAX * sizeof(int));
|
||||
inputs = vir_inputs;
|
||||
if (InputsRead & VERT_ATTRIB_POS)
|
||||
inputs[VERT_ATTRIB_POS] = 0;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR0))
|
||||
inputs[VERT_ATTRIB_COLOR0] = 2;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR1))
|
||||
inputs[VERT_ATTRIB_COLOR1] = 3;
|
||||
for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++)
|
||||
if (InputsRead & (1 << i))
|
||||
inputs[i] = 6 + (i - VERT_ATTRIB_TEX0);
|
||||
}
|
||||
/* Fixed, apply to vir0 only */
|
||||
memcpy(vir_inputs, inputs, VERT_ATTRIB_MAX * sizeof(int));
|
||||
inputs = vir_inputs;
|
||||
if (InputsRead & VERT_ATTRIB_POS)
|
||||
inputs[VERT_ATTRIB_POS] = 0;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR0))
|
||||
inputs[VERT_ATTRIB_COLOR0] = 2;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR1))
|
||||
inputs[VERT_ATTRIB_COLOR1] = 3;
|
||||
for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++)
|
||||
if (InputsRead & (1 << i))
|
||||
inputs[i] = 6 + (i - VERT_ATTRIB_TEX0);
|
||||
|
||||
RENDERINPUTS_COPY(rmesa->state.render_inputs_bitset, render_inputs_bitset);
|
||||
}
|
||||
@@ -532,3 +532,19 @@ void r300ReleaseArrays(GLcontext * ctx)
|
||||
r300ReleaseDmaRegion(rmesa, &rmesa->state.aos[i], __FUNCTION__);
|
||||
}
|
||||
}
|
||||
|
||||
void r300EmitCacheFlush(r300ContextPtr rmesa)
|
||||
{
|
||||
int cmd_reserved = 0;
|
||||
int cmd_written = 0;
|
||||
|
||||
drm_radeon_cmd_header_t *cmd = NULL;
|
||||
|
||||
reg_start(R300_RB3D_DSTCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
|
||||
|
||||
reg_start(R300_RB3D_ZCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_ZCACHE_UNKNOWN_03);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -225,5 +225,15 @@ void r300UseArrays(GLcontext * ctx);
|
||||
#endif
|
||||
|
||||
extern void r300ReleaseArrays(GLcontext * ctx);
|
||||
extern int r300PrimitiveType(r300ContextPtr rmesa, int prim);
|
||||
extern int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim);
|
||||
|
||||
extern void r300EmitCacheFlush(r300ContextPtr rmesa);
|
||||
|
||||
extern GLuint r300VAPInputRoute1(uint32_t * dst, int swizzle[][4], GLuint nr);
|
||||
extern GLuint r300VAPInputCntl0(GLcontext * ctx, GLuint InputsRead);
|
||||
extern GLuint r300VAPInputCntl1(GLcontext * ctx, GLuint InputsRead);
|
||||
extern GLuint r300VAPOutputCntl0(GLcontext * ctx, GLuint OutputsWritten);
|
||||
extern GLuint r300VAPOutputCntl1(GLcontext * ctx, GLuint OutputsWritten);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -172,11 +172,7 @@ static void r300ClearBuffer(r300ContextPtr r300, int flags, int buffer)
|
||||
cmd2[7].u = r300PackFloat32(ctx->Color.ClearColor[2]);
|
||||
cmd2[8].u = r300PackFloat32(ctx->Color.ClearColor[3]);
|
||||
|
||||
reg_start(R300_RB3D_DSTCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
|
||||
|
||||
reg_start(R300_RB3D_ZCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_ZCACHE_UNKNOWN_03);
|
||||
r300EmitCacheFlush(rmesa);
|
||||
cp_wait(rmesa, R300_WAIT_3D | R300_WAIT_3D_CLEAN);
|
||||
}
|
||||
|
||||
@@ -412,19 +408,22 @@ static void r300Clear(GLcontext * ctx, GLbitfield mask)
|
||||
|
||||
void r300Flush(GLcontext * ctx)
|
||||
{
|
||||
r300ContextPtr r300 = R300_CONTEXT(ctx);
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_IOCTL)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
if (r300->cmdbuf.count_used > r300->cmdbuf.count_reemit)
|
||||
r300FlushCmdBuf(r300, __FUNCTION__);
|
||||
if (rmesa->dma.flush)
|
||||
rmesa->dma.flush( rmesa );
|
||||
|
||||
if (rmesa->cmdbuf.count_used > rmesa->cmdbuf.count_reemit)
|
||||
r300FlushCmdBuf(rmesa, __FUNCTION__);
|
||||
}
|
||||
|
||||
#ifdef USER_BUFFERS
|
||||
#include "r300_mem.h"
|
||||
|
||||
static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
|
||||
void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
|
||||
{
|
||||
struct r300_dma_buffer *dmabuf;
|
||||
size = MAX2(size, RADEON_BUFFER_SIZE * 16);
|
||||
@@ -436,9 +435,12 @@ static void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size)
|
||||
rmesa->dma.flush(rmesa);
|
||||
}
|
||||
|
||||
if (rmesa->dma.current.buf)
|
||||
if (rmesa->dma.current.buf) {
|
||||
#ifdef USER_BUFFERS
|
||||
r300_mem_use(rmesa, rmesa->dma.current.buf->id);
|
||||
#endif
|
||||
r300ReleaseDmaRegion(rmesa, &rmesa->dma.current, __FUNCTION__);
|
||||
|
||||
}
|
||||
if (rmesa->dma.nr_released_bufs > 4)
|
||||
r300FlushCmdBuf(rmesa, __FUNCTION__);
|
||||
|
||||
|
||||
@@ -56,4 +56,5 @@ extern void r300AllocDmaRegion(r300ContextPtr rmesa,
|
||||
|
||||
extern void r300InitIoctlFuncs(struct dd_function_table *functions);
|
||||
|
||||
extern void r300RefillCurrentDmaRegion(r300ContextPtr rmesa, int size);
|
||||
#endif /* __R300_IOCTL_H__ */
|
||||
|
||||
@@ -79,7 +79,7 @@ extern int future_hw_tcl_on;
|
||||
/**
|
||||
* \brief Convert a OpenGL primitive type into a R300 primitive type.
|
||||
*/
|
||||
static int r300PrimitiveType(r300ContextPtr rmesa, GLcontext * ctx, int prim)
|
||||
int r300PrimitiveType(r300ContextPtr rmesa, int prim)
|
||||
{
|
||||
switch (prim & PRIM_MODE_MASK) {
|
||||
case GL_POINTS:
|
||||
@@ -119,7 +119,7 @@ static int r300PrimitiveType(r300ContextPtr rmesa, GLcontext * ctx, int prim)
|
||||
}
|
||||
}
|
||||
|
||||
static int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim)
|
||||
int r300NumVerts(r300ContextPtr rmesa, int num_verts, int prim)
|
||||
{
|
||||
int verts_off = 0;
|
||||
|
||||
@@ -261,7 +261,7 @@ static void r300RunRenderPrimitive(r300ContextPtr rmesa, GLcontext * ctx,
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct vertex_buffer *vb = &tnl->vb;
|
||||
|
||||
type = r300PrimitiveType(rmesa, ctx, prim);
|
||||
type = r300PrimitiveType(rmesa, prim);
|
||||
num_verts = r300NumVerts(rmesa, end - start, prim);
|
||||
|
||||
if (type < 0 || num_verts <= 0)
|
||||
@@ -287,29 +287,20 @@ static GLboolean r300RunRender(GLcontext * ctx,
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
int i;
|
||||
int cmd_reserved = 0;
|
||||
int cmd_written = 0;
|
||||
drm_radeon_cmd_header_t *cmd = NULL;
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct vertex_buffer *vb = &tnl->vb;
|
||||
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_PRIMS)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
if (hw_tcl_on == GL_FALSE)
|
||||
vb->AttribPtr[VERT_ATTRIB_POS] = vb->ClipPtr;
|
||||
r300UpdateShaders(rmesa);
|
||||
if (r300EmitArrays(ctx))
|
||||
return GL_TRUE;
|
||||
|
||||
r300UpdateShaderStates(rmesa);
|
||||
|
||||
reg_start(R300_RB3D_DSTCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
|
||||
|
||||
reg_start(R300_RB3D_ZCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_ZCACHE_UNKNOWN_03);
|
||||
|
||||
r300EmitCacheFlush(rmesa);
|
||||
r300EmitState(rmesa);
|
||||
|
||||
for (i = 0; i < vb->PrimitiveCount; i++) {
|
||||
@@ -319,11 +310,7 @@ static GLboolean r300RunRender(GLcontext * ctx,
|
||||
r300RunRenderPrimitive(rmesa, ctx, start, end, prim);
|
||||
}
|
||||
|
||||
reg_start(R300_RB3D_DSTCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_DSTCACHE_UNKNOWN_0A);
|
||||
|
||||
reg_start(R300_RB3D_ZCACHE_CTLSTAT, 0);
|
||||
e32(R300_RB3D_ZCACHE_UNKNOWN_03);
|
||||
r300EmitCacheFlush(rmesa);
|
||||
|
||||
#ifdef USER_BUFFERS
|
||||
r300UseArrays(ctx);
|
||||
@@ -384,12 +371,17 @@ static int r300Fallback(GLcontext * ctx)
|
||||
static GLboolean r300RunNonTCLRender(GLcontext * ctx,
|
||||
struct tnl_pipeline_stage *stage)
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
|
||||
if (RADEON_DEBUG & DEBUG_PRIMS)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
if (r300Fallback(ctx) >= R300_FALLBACK_RAST)
|
||||
return GL_TRUE;
|
||||
|
||||
if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL))
|
||||
return GL_TRUE;
|
||||
|
||||
return r300RunRender(ctx, stage);
|
||||
}
|
||||
|
||||
|
||||
@@ -1782,13 +1782,15 @@ static void r300ResetHwState(r300ContextPtr r300)
|
||||
r300->hw.vap_clip.cmd[4] = r300PackFloat32(1.0); /* Y */
|
||||
|
||||
/* XXX: Other families? */
|
||||
switch (r300->radeon.radeonScreen->chip_family) {
|
||||
case CHIP_FAMILY_R300:
|
||||
r300->hw.unk2288.cmd[1] = R300_2288_R300;
|
||||
break;
|
||||
default:
|
||||
r300->hw.unk2288.cmd[1] = R300_2288_RV350;
|
||||
break;
|
||||
if (has_tcl) {
|
||||
switch (r300->radeon.radeonScreen->chip_family) {
|
||||
case CHIP_FAMILY_R300:
|
||||
r300->hw.unk2288.cmd[1] = R300_2288_R300;
|
||||
break;
|
||||
default:
|
||||
r300->hw.unk2288.cmd[1] = R300_2288_RV350;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
r300->hw.gb_enable.cmd[1] = R300_GB_POINT_STUFF_ENABLE
|
||||
|
||||
@@ -37,8 +37,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
#include "r300_context.h"
|
||||
|
||||
#define R300_NEWPRIM( rmesa ) \
|
||||
do { \
|
||||
if ( rmesa->dma.flush ) \
|
||||
rmesa->dma.flush( rmesa ); \
|
||||
} while (0)
|
||||
|
||||
#define R300_STATECHANGE(r300, atom) \
|
||||
do { \
|
||||
R300_NEWPRIM(r300); \
|
||||
r300->hw.atom.dirty = GL_TRUE; \
|
||||
r300->hw.is_dirty = GL_TRUE; \
|
||||
} while(0)
|
||||
|
||||
@@ -0,0 +1,711 @@
|
||||
/**************************************************************************
|
||||
|
||||
Copyright (C) 2007 Dave Airlie
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
on the rights to use, copy, modify, merge, publish, distribute, sub
|
||||
license, and/or sell copies of the Software, and to permit persons to whom
|
||||
the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the next
|
||||
paragraph) shall be included in all copies or substantial portions of the
|
||||
Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
**************************************************************************/
|
||||
|
||||
/*
|
||||
* Authors:
|
||||
* Dave Airlie <airlied@linux.ie>
|
||||
*/
|
||||
|
||||
/* derived from r200 swtcl path */
|
||||
|
||||
|
||||
|
||||
#include "glheader.h"
|
||||
#include "mtypes.h"
|
||||
#include "colormac.h"
|
||||
#include "enums.h"
|
||||
#include "image.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
|
||||
#include "swrast/s_context.h"
|
||||
#include "swrast/s_fog.h"
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
#include "math/m_translate.h"
|
||||
#include "tnl/tnl.h"
|
||||
#include "tnl/t_context.h"
|
||||
#include "tnl/t_pipeline.h"
|
||||
|
||||
#include "r300_context.h"
|
||||
#include "r300_swtcl.h"
|
||||
#include "r300_state.h"
|
||||
#include "r300_ioctl.h"
|
||||
#include "r300_emit.h"
|
||||
#include "r300_mem.h"
|
||||
|
||||
static void flush_last_swtcl_prim( r300ContextPtr rmesa );
|
||||
|
||||
|
||||
void r300EmitVertexAOS(r300ContextPtr rmesa, GLuint vertex_size, GLuint offset);
|
||||
void r300EmitVbufPrim(r300ContextPtr rmesa, GLuint primitive, GLuint vertex_nr);
|
||||
#define EMIT_ATTR( ATTR, STYLE ) \
|
||||
do { \
|
||||
rmesa->swtcl.vertex_attrs[rmesa->swtcl.vertex_attr_count].attrib = (ATTR); \
|
||||
rmesa->swtcl.vertex_attrs[rmesa->swtcl.vertex_attr_count].format = (STYLE); \
|
||||
rmesa->swtcl.vertex_attr_count++; \
|
||||
} while (0)
|
||||
|
||||
#define EMIT_PAD( N ) \
|
||||
do { \
|
||||
rmesa->swtcl.vertex_attrs[rmesa->swtcl.vertex_attr_count].attrib = 0; \
|
||||
rmesa->swtcl.vertex_attrs[rmesa->swtcl.vertex_attr_count].format = EMIT_PAD; \
|
||||
rmesa->swtcl.vertex_attrs[rmesa->swtcl.vertex_attr_count].offset = (N); \
|
||||
rmesa->swtcl.vertex_attr_count++; \
|
||||
} while (0)
|
||||
|
||||
/* this differs from the VIR0 in emit.c - TODO merge them using another option */
|
||||
static GLuint r300VAPInputRoute0(uint32_t * dst, GLvector4f ** attribptr,
|
||||
int *inputs, GLint * tab, GLuint nr)
|
||||
{
|
||||
GLuint i, dw;
|
||||
|
||||
/* type, inputs, stop bit, size */
|
||||
for (i = 0; i + 1 < nr; i += 2) {
|
||||
dw = (inputs[tab[i]] << 8) | 0x3;
|
||||
dw |= ((inputs[tab[i + 1]] << 8) | 0x3) << 16;
|
||||
if (i + 2 == nr) {
|
||||
dw |= (R300_VAP_INPUT_ROUTE_END << 16);
|
||||
}
|
||||
dst[i >> 1] = dw;
|
||||
}
|
||||
|
||||
if (nr & 1) {
|
||||
dw = (inputs[tab[nr - 1]] << 8) | 0x3;
|
||||
dw |= R300_VAP_INPUT_ROUTE_END;
|
||||
dst[nr >> 1] = dw;
|
||||
}
|
||||
|
||||
return (nr + 1) >> 1;
|
||||
}
|
||||
|
||||
static void r300SetVertexFormat( GLcontext *ctx )
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT( ctx );
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct vertex_buffer *VB = &tnl->vb;
|
||||
DECLARE_RENDERINPUTS(index_bitset);
|
||||
GLuint InputsRead = 0, OutputsWritten = 0;
|
||||
int vap_fmt_0 = 0;
|
||||
int vap_vte_cntl = 0;
|
||||
int offset = 0;
|
||||
int vte = 0;
|
||||
GLint inputs[VERT_ATTRIB_MAX];
|
||||
GLint tab[VERT_ATTRIB_MAX];
|
||||
int swizzle[VERT_ATTRIB_MAX][4];
|
||||
GLuint i, nr;
|
||||
|
||||
DECLARE_RENDERINPUTS(render_inputs_bitset);
|
||||
RENDERINPUTS_COPY(render_inputs_bitset, tnl->render_inputs_bitset);
|
||||
RENDERINPUTS_COPY( index_bitset, tnl->render_inputs_bitset );
|
||||
RENDERINPUTS_COPY(rmesa->state.render_inputs_bitset, render_inputs_bitset);
|
||||
|
||||
/* Important:
|
||||
*/
|
||||
if ( VB->NdcPtr != NULL ) {
|
||||
VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr;
|
||||
}
|
||||
else {
|
||||
VB->AttribPtr[VERT_ATTRIB_POS] = VB->ClipPtr;
|
||||
}
|
||||
|
||||
assert( VB->AttribPtr[VERT_ATTRIB_POS] != NULL );
|
||||
rmesa->swtcl.vertex_attr_count = 0;
|
||||
|
||||
/* EMIT_ATTR's must be in order as they tell t_vertex.c how to
|
||||
* build up a hardware vertex.
|
||||
*/
|
||||
if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_POS)) {
|
||||
vap_vte_cntl |= R300_VTX_W0_FMT;
|
||||
InputsRead |= 1 << VERT_ATTRIB_POS;
|
||||
OutputsWritten |= 1 << VERT_RESULT_HPOS;
|
||||
EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F );
|
||||
} else
|
||||
EMIT_PAD(4 * sizeof(float));
|
||||
|
||||
offset = 4;
|
||||
|
||||
if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_POINTSIZE )) {
|
||||
EMIT_ATTR( _TNL_ATTRIB_POINTSIZE, EMIT_1F );
|
||||
vap_fmt_0 |= R300_VAP_OUTPUT_VTX_FMT_0__PT_SIZE_PRESENT;
|
||||
offset += 1;
|
||||
}
|
||||
|
||||
if (RENDERINPUTS_TEST(index_bitset, _TNL_ATTRIB_COLOR0)) {
|
||||
rmesa->swtcl.coloroffset = offset;
|
||||
InputsRead |= 1 << VERT_ATTRIB_COLOR0;
|
||||
OutputsWritten |= 1 << VERT_RESULT_COL0;
|
||||
EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4F );
|
||||
}
|
||||
|
||||
offset += 4;
|
||||
|
||||
rmesa->swtcl.specoffset = 0;
|
||||
if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_COLOR1 )) {
|
||||
rmesa->swtcl.specoffset = offset;
|
||||
EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_4F );
|
||||
InputsRead |= 1 << VERT_ATTRIB_COLOR1;
|
||||
OutputsWritten |= 1 << VERT_RESULT_COL1;
|
||||
}
|
||||
|
||||
if (RENDERINPUTS_TEST_RANGE( index_bitset, _TNL_FIRST_TEX, _TNL_LAST_TEX )) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
|
||||
if (RENDERINPUTS_TEST( index_bitset, _TNL_ATTRIB_TEX(i) )) {
|
||||
InputsRead |= 1 << (VERT_ATTRIB_TEX0 + i);
|
||||
OutputsWritten |= 1 << (VERT_RESULT_TEX0 + i);
|
||||
EMIT_ATTR( _TNL_ATTRIB_TEX0+i, EMIT_4F );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0, nr = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
if (InputsRead & (1 << i)) {
|
||||
inputs[i] = nr++;
|
||||
} else {
|
||||
inputs[i] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Fixed, apply to vir0 only */
|
||||
if (InputsRead & (1 << VERT_ATTRIB_POS))
|
||||
inputs[VERT_ATTRIB_POS] = 0;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR0))
|
||||
inputs[VERT_ATTRIB_COLOR0] = 2;
|
||||
if (InputsRead & (1 << VERT_ATTRIB_COLOR1))
|
||||
inputs[VERT_ATTRIB_COLOR1] = 3;
|
||||
for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++)
|
||||
if (InputsRead & (1 << i))
|
||||
inputs[i] = 6 + (i - VERT_ATTRIB_TEX0);
|
||||
|
||||
for (i = 0, nr = 0; i < VERT_ATTRIB_MAX; i++) {
|
||||
if (InputsRead & (1 << i)) {
|
||||
tab[nr++] = i;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
int ci;
|
||||
|
||||
swizzle[i][0] = SWIZZLE_ZERO;
|
||||
swizzle[i][1] = SWIZZLE_ZERO;
|
||||
swizzle[i][2] = SWIZZLE_ZERO;
|
||||
swizzle[i][3] = SWIZZLE_ONE;
|
||||
|
||||
for (ci = 0; ci < VB->AttribPtr[tab[i]]->size; ci++) {
|
||||
swizzle[i][ci] = ci;
|
||||
}
|
||||
}
|
||||
|
||||
R300_NEWPRIM(rmesa);
|
||||
R300_STATECHANGE(rmesa, vir[0]);
|
||||
((drm_r300_cmd_header_t *) rmesa->hw.vir[0].cmd)->packet0.count =
|
||||
r300VAPInputRoute0(&rmesa->hw.vir[0].cmd[R300_VIR_CNTL_0],
|
||||
VB->AttribPtr, inputs, tab, nr);
|
||||
R300_STATECHANGE(rmesa, vir[1]);
|
||||
((drm_r300_cmd_header_t *) rmesa->hw.vir[1].cmd)->packet0.count =
|
||||
r300VAPInputRoute1(&rmesa->hw.vir[1].cmd[R300_VIR_CNTL_0], swizzle,
|
||||
nr);
|
||||
|
||||
R300_STATECHANGE(rmesa, vic);
|
||||
rmesa->hw.vic.cmd[R300_VIC_CNTL_0] = r300VAPInputCntl0(ctx, InputsRead);
|
||||
rmesa->hw.vic.cmd[R300_VIC_CNTL_1] = r300VAPInputCntl1(ctx, InputsRead);
|
||||
|
||||
R300_STATECHANGE(rmesa, vof);
|
||||
rmesa->hw.vof.cmd[R300_VOF_CNTL_0] = r300VAPOutputCntl0(ctx, OutputsWritten);
|
||||
rmesa->hw.vof.cmd[R300_VOF_CNTL_1] = r300VAPOutputCntl1(ctx, OutputsWritten);
|
||||
|
||||
rmesa->swtcl.vertex_size =
|
||||
_tnl_install_attrs( ctx,
|
||||
rmesa->swtcl.vertex_attrs,
|
||||
rmesa->swtcl.vertex_attr_count,
|
||||
NULL, 0 );
|
||||
|
||||
rmesa->swtcl.vertex_size /= 4;
|
||||
|
||||
RENDERINPUTS_COPY( rmesa->tnl_index_bitset, index_bitset );
|
||||
|
||||
vte = rmesa->hw.vte.cmd[1];
|
||||
R300_STATECHANGE(rmesa, vte);
|
||||
rmesa->hw.vte.cmd[1] = vte;
|
||||
rmesa->hw.vte.cmd[2] = rmesa->swtcl.vertex_size;
|
||||
}
|
||||
|
||||
|
||||
/* Flush vertices in the current dma region.
|
||||
*/
|
||||
static void flush_last_swtcl_prim( r300ContextPtr rmesa )
|
||||
{
|
||||
if (RADEON_DEBUG & DEBUG_IOCTL)
|
||||
fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
rmesa->dma.flush = NULL;
|
||||
|
||||
if (rmesa->dma.current.buf) {
|
||||
struct r300_dma_region *current = &rmesa->dma.current;
|
||||
GLuint current_offset = GET_START(current);
|
||||
|
||||
assert (current->start +
|
||||
rmesa->swtcl.numverts * rmesa->swtcl.vertex_size * 4 ==
|
||||
current->ptr);
|
||||
|
||||
if (rmesa->dma.current.start != rmesa->dma.current.ptr) {
|
||||
|
||||
r300EnsureCmdBufSpace( rmesa, rmesa->hw.max_state_size + (12*sizeof(int)), __FUNCTION__);
|
||||
|
||||
r300EmitState(rmesa);
|
||||
|
||||
r300EmitVertexAOS( rmesa,
|
||||
rmesa->swtcl.vertex_size,
|
||||
current_offset);
|
||||
|
||||
r300EmitVbufPrim( rmesa,
|
||||
rmesa->swtcl.hw_primitive,
|
||||
rmesa->swtcl.numverts);
|
||||
|
||||
r300EmitCacheFlush(rmesa);
|
||||
}
|
||||
|
||||
rmesa->swtcl.numverts = 0;
|
||||
current->start = current->ptr;
|
||||
}
|
||||
}
|
||||
|
||||
/* Alloc space in the current dma region.
|
||||
*/
|
||||
static void *
|
||||
r300AllocDmaLowVerts( r300ContextPtr rmesa, int nverts, int vsize )
|
||||
{
|
||||
GLuint bytes = vsize * nverts;
|
||||
|
||||
if ( rmesa->dma.current.ptr + bytes > rmesa->dma.current.end )
|
||||
r300RefillCurrentDmaRegion( rmesa, bytes);
|
||||
|
||||
if (!rmesa->dma.flush) {
|
||||
rmesa->radeon.glCtx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
|
||||
rmesa->dma.flush = flush_last_swtcl_prim;
|
||||
}
|
||||
|
||||
ASSERT( vsize == rmesa->swtcl.vertex_size * 4 );
|
||||
ASSERT( rmesa->dma.flush == flush_last_swtcl_prim );
|
||||
ASSERT( rmesa->dma.current.start +
|
||||
rmesa->swtcl.numverts * rmesa->swtcl.vertex_size * 4 ==
|
||||
rmesa->dma.current.ptr );
|
||||
|
||||
{
|
||||
GLubyte *head = (GLubyte *) (rmesa->dma.current.address + rmesa->dma.current.ptr);
|
||||
rmesa->dma.current.ptr += bytes;
|
||||
rmesa->swtcl.numverts += nverts;
|
||||
return head;
|
||||
}
|
||||
}
|
||||
|
||||
static GLuint reduced_prim[] = {
|
||||
GL_POINTS,
|
||||
GL_LINES,
|
||||
GL_LINES,
|
||||
GL_LINES,
|
||||
GL_TRIANGLES,
|
||||
GL_TRIANGLES,
|
||||
GL_TRIANGLES,
|
||||
GL_TRIANGLES,
|
||||
GL_TRIANGLES,
|
||||
GL_TRIANGLES,
|
||||
};
|
||||
|
||||
static void r300RasterPrimitive( GLcontext *ctx, GLuint prim );
|
||||
static void r300RenderPrimitive( GLcontext *ctx, GLenum prim );
|
||||
//static void r300ResetLineStipple( GLcontext *ctx );
|
||||
|
||||
/***********************************************************************
|
||||
* Emit primitives as inline vertices *
|
||||
***********************************************************************/
|
||||
|
||||
|
||||
#define HAVE_POINTS 1
|
||||
#define HAVE_LINES 1
|
||||
#define HAVE_LINE_STRIPS 1
|
||||
#define HAVE_TRIANGLES 1
|
||||
#define HAVE_TRI_STRIPS 1
|
||||
#define HAVE_TRI_STRIP_1 0
|
||||
#define HAVE_TRI_FANS 1
|
||||
#define HAVE_QUADS 0
|
||||
#define HAVE_QUAD_STRIPS 0
|
||||
#define HAVE_POLYGONS 1
|
||||
#define HAVE_ELTS 1
|
||||
|
||||
#undef LOCAL_VARS
|
||||
#undef ALLOC_VERTS
|
||||
#define CTX_ARG r300ContextPtr rmesa
|
||||
#define GET_VERTEX_DWORDS() rmesa->swtcl.vertex_size
|
||||
#define ALLOC_VERTS( n, size ) r300AllocDmaLowVerts( rmesa, n, size * 4 )
|
||||
#define LOCAL_VARS \
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx); \
|
||||
const char *r300verts = (char *)rmesa->swtcl.verts;
|
||||
#define VERT(x) (r300Vertex *)(r300verts + ((x) * vertsize * sizeof(int)))
|
||||
#define VERTEX r300Vertex
|
||||
#define DO_DEBUG_VERTS (1 && (RADEON_DEBUG & DEBUG_VERTS))
|
||||
#define PRINT_VERTEX(x)
|
||||
#undef TAG
|
||||
#define TAG(x) r300_##x
|
||||
#include "tnl_dd/t_dd_triemit.h"
|
||||
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* Macros for t_dd_tritmp.h to draw basic primitives *
|
||||
***********************************************************************/
|
||||
|
||||
#define QUAD( a, b, c, d ) r300_quad( rmesa, a, b, c, d )
|
||||
#define TRI( a, b, c ) r300_triangle( rmesa, a, b, c )
|
||||
#define LINE( a, b ) r300_line( rmesa, a, b )
|
||||
#define POINT( a ) r300_point( rmesa, a )
|
||||
|
||||
/***********************************************************************
|
||||
* Build render functions from dd templates *
|
||||
***********************************************************************/
|
||||
|
||||
#define R300_TWOSIDE_BIT 0x01
|
||||
#define R300_UNFILLED_BIT 0x02
|
||||
#define R300_MAX_TRIFUNC 0x04
|
||||
|
||||
static struct {
|
||||
tnl_points_func points;
|
||||
tnl_line_func line;
|
||||
tnl_triangle_func triangle;
|
||||
tnl_quad_func quad;
|
||||
} rast_tab[R300_MAX_TRIFUNC];
|
||||
|
||||
#define DO_FALLBACK 0
|
||||
#define DO_UNFILLED (IND & R300_UNFILLED_BIT)
|
||||
#define DO_TWOSIDE (IND & R300_TWOSIDE_BIT)
|
||||
#define DO_FLAT 0
|
||||
#define DO_OFFSET 0
|
||||
#define DO_TRI 1
|
||||
#define DO_QUAD 1
|
||||
#define DO_LINE 1
|
||||
#define DO_POINTS 1
|
||||
#define DO_FULL_QUAD 1
|
||||
|
||||
#define HAVE_RGBA 1
|
||||
#define HAVE_SPEC 1
|
||||
#define HAVE_BACK_COLORS 0
|
||||
#define HAVE_HW_FLATSHADE 1
|
||||
#define TAB rast_tab
|
||||
|
||||
#define DEPTH_SCALE 1.0
|
||||
#define UNFILLED_TRI unfilled_tri
|
||||
#define UNFILLED_QUAD unfilled_quad
|
||||
#define VERT_X(_v) _v->v.x
|
||||
#define VERT_Y(_v) _v->v.y
|
||||
#define VERT_Z(_v) _v->v.z
|
||||
#define AREA_IS_CCW( a ) (a < 0)
|
||||
#define GET_VERTEX(e) (rmesa->swtcl.verts + (e*rmesa->swtcl.vertex_size*sizeof(int)))
|
||||
|
||||
/* Only used to pull back colors into vertices (ie, we know color is
|
||||
* floating point).
|
||||
*/
|
||||
#define R300_COLOR( dst, src ) \
|
||||
do { \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[0], (src)[2]); \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[1], (src)[1]); \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[2], (src)[0]); \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[3], (src)[3]); \
|
||||
} while (0)
|
||||
|
||||
#define VERT_SET_RGBA( v, c ) if (coloroffset) R300_COLOR( v->ub4[coloroffset], c )
|
||||
#define VERT_COPY_RGBA( v0, v1 ) if (coloroffset) v0->ui[coloroffset] = v1->ui[coloroffset]
|
||||
#define VERT_SAVE_RGBA( idx ) if (coloroffset) color[idx] = v[idx]->ui[coloroffset]
|
||||
#define VERT_RESTORE_RGBA( idx ) if (coloroffset) v[idx]->ui[coloroffset] = color[idx]
|
||||
|
||||
#define R300_SPEC( dst, src ) \
|
||||
do { \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[0], (src)[2]); \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[1], (src)[1]); \
|
||||
UNCLAMPED_FLOAT_TO_UBYTE((dst)[2], (src)[0]); \
|
||||
} while (0)
|
||||
|
||||
#define VERT_SET_SPEC( v, c ) if (specoffset) R300_SPEC( v->ub4[specoffset], c )
|
||||
#define VERT_COPY_SPEC( v0, v1 ) if (specoffset) COPY_3V(v0->ub4[specoffset], v1->ub4[specoffset])
|
||||
#define VERT_SAVE_SPEC( idx ) if (specoffset) spec[idx] = v[idx]->ui[specoffset]
|
||||
#define VERT_RESTORE_SPEC( idx ) if (specoffset) v[idx]->ui[specoffset] = spec[idx]
|
||||
|
||||
#undef LOCAL_VARS
|
||||
#undef TAG
|
||||
#undef INIT
|
||||
|
||||
#define LOCAL_VARS(n) \
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx); \
|
||||
GLuint color[n], spec[n]; \
|
||||
GLuint coloroffset = rmesa->swtcl.coloroffset; \
|
||||
GLuint specoffset = rmesa->swtcl.specoffset; \
|
||||
(void) color; (void) spec; (void) coloroffset; (void) specoffset;
|
||||
|
||||
/***********************************************************************
|
||||
* Helpers for rendering unfilled primitives *
|
||||
***********************************************************************/
|
||||
|
||||
#define RASTERIZE(x) r300RasterPrimitive( ctx, reduced_prim[x] )
|
||||
#define RENDER_PRIMITIVE rmesa->swtcl.render_primitive
|
||||
#undef TAG
|
||||
#define TAG(x) x
|
||||
#include "tnl_dd/t_dd_unfilled.h"
|
||||
#undef IND
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* Generate GL render functions *
|
||||
***********************************************************************/
|
||||
|
||||
|
||||
#define IND (0)
|
||||
#define TAG(x) x
|
||||
#include "tnl_dd/t_dd_tritmp.h"
|
||||
|
||||
#define IND (R300_TWOSIDE_BIT)
|
||||
#define TAG(x) x##_twoside
|
||||
#include "tnl_dd/t_dd_tritmp.h"
|
||||
|
||||
#define IND (R300_UNFILLED_BIT)
|
||||
#define TAG(x) x##_unfilled
|
||||
#include "tnl_dd/t_dd_tritmp.h"
|
||||
|
||||
#define IND (R300_TWOSIDE_BIT|R300_UNFILLED_BIT)
|
||||
#define TAG(x) x##_twoside_unfilled
|
||||
#include "tnl_dd/t_dd_tritmp.h"
|
||||
|
||||
|
||||
|
||||
static void init_rast_tab( void )
|
||||
{
|
||||
init();
|
||||
init_twoside();
|
||||
init_unfilled();
|
||||
init_twoside_unfilled();
|
||||
}
|
||||
|
||||
/**********************************************************************/
|
||||
/* Render unclipped begin/end objects */
|
||||
/**********************************************************************/
|
||||
|
||||
#define RENDER_POINTS( start, count ) \
|
||||
for ( ; start < count ; start++) \
|
||||
r300_point( rmesa, VERT(start) )
|
||||
#define RENDER_LINE( v0, v1 ) \
|
||||
r300_line( rmesa, VERT(v0), VERT(v1) )
|
||||
#define RENDER_TRI( v0, v1, v2 ) \
|
||||
r300_triangle( rmesa, VERT(v0), VERT(v1), VERT(v2) )
|
||||
#define RENDER_QUAD( v0, v1, v2, v3 ) \
|
||||
r300_quad( rmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
|
||||
#define INIT(x) do { \
|
||||
r300RenderPrimitive( ctx, x ); \
|
||||
} while (0)
|
||||
#undef LOCAL_VARS
|
||||
#define LOCAL_VARS \
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx); \
|
||||
const GLuint vertsize = rmesa->swtcl.vertex_size; \
|
||||
const char *r300verts = (char *)rmesa->swtcl.verts; \
|
||||
const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts; \
|
||||
const GLboolean stipple = ctx->Line.StippleFlag; \
|
||||
(void) elt; (void) stipple;
|
||||
#define RESET_STIPPLE //if ( stipple ) r200ResetLineStipple( ctx );
|
||||
#define RESET_OCCLUSION
|
||||
#define PRESERVE_VB_DEFS
|
||||
#define ELT(x) (x)
|
||||
#define TAG(x) r300_##x##_verts
|
||||
#include "tnl/t_vb_rendertmp.h"
|
||||
#undef ELT
|
||||
#undef TAG
|
||||
#define TAG(x) r300_##x##_elts
|
||||
#define ELT(x) elt[x]
|
||||
#include "tnl/t_vb_rendertmp.h"
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* Choose render functions */
|
||||
/**********************************************************************/
|
||||
static void r300ChooseRenderState( GLcontext *ctx )
|
||||
{
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
GLuint index = 0;
|
||||
GLuint flags = ctx->_TriangleCaps;
|
||||
|
||||
if (flags & DD_TRI_LIGHT_TWOSIDE) index |= R300_TWOSIDE_BIT;
|
||||
if (flags & DD_TRI_UNFILLED) index |= R300_UNFILLED_BIT;
|
||||
|
||||
if (index != rmesa->swtcl.RenderIndex) {
|
||||
tnl->Driver.Render.Points = rast_tab[index].points;
|
||||
tnl->Driver.Render.Line = rast_tab[index].line;
|
||||
tnl->Driver.Render.ClippedLine = rast_tab[index].line;
|
||||
tnl->Driver.Render.Triangle = rast_tab[index].triangle;
|
||||
tnl->Driver.Render.Quad = rast_tab[index].quad;
|
||||
|
||||
if (index == 0) {
|
||||
tnl->Driver.Render.PrimTabVerts = r300_render_tab_verts;
|
||||
tnl->Driver.Render.PrimTabElts = r300_render_tab_elts;
|
||||
tnl->Driver.Render.ClippedPolygon = r300_fast_clipped_poly;
|
||||
} else {
|
||||
tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
|
||||
tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
|
||||
tnl->Driver.Render.ClippedPolygon = _tnl_RenderClippedPolygon;
|
||||
}
|
||||
|
||||
rmesa->swtcl.RenderIndex = index;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void r300RenderStart(GLcontext *ctx)
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT( ctx );
|
||||
// fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
r300ChooseRenderState(ctx);
|
||||
r300SetVertexFormat(ctx);
|
||||
|
||||
r300UpdateShaderStates(rmesa);
|
||||
|
||||
r300EmitCacheFlush(rmesa);
|
||||
|
||||
if (rmesa->dma.flush != 0 &&
|
||||
rmesa->dma.flush != flush_last_swtcl_prim)
|
||||
rmesa->dma.flush( rmesa );
|
||||
|
||||
}
|
||||
|
||||
static void r300RenderFinish(GLcontext *ctx)
|
||||
{
|
||||
}
|
||||
|
||||
static void r300RasterPrimitive( GLcontext *ctx, GLuint hwprim )
|
||||
{
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
|
||||
if (rmesa->swtcl.hw_primitive != hwprim) {
|
||||
R300_NEWPRIM( rmesa );
|
||||
rmesa->swtcl.hw_primitive = hwprim;
|
||||
}
|
||||
}
|
||||
|
||||
static void r300RenderPrimitive(GLcontext *ctx, GLenum prim)
|
||||
{
|
||||
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
rmesa->swtcl.render_primitive = prim;
|
||||
|
||||
if ((prim == GL_TRIANGLES) && (ctx->_TriangleCaps & DD_TRI_UNFILLED))
|
||||
return;
|
||||
|
||||
r300RasterPrimitive( ctx, reduced_prim[prim] );
|
||||
// fprintf(stderr, "%s\n", __FUNCTION__);
|
||||
|
||||
}
|
||||
|
||||
static void r300ResetLineStipple(GLcontext *ctx)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
void r300InitSwtcl(GLcontext *ctx)
|
||||
{
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
r300ContextPtr rmesa = R300_CONTEXT(ctx);
|
||||
static int firsttime = 1;
|
||||
|
||||
if (firsttime) {
|
||||
init_rast_tab();
|
||||
firsttime = 0;
|
||||
}
|
||||
|
||||
tnl->Driver.Render.Start = r300RenderStart;
|
||||
tnl->Driver.Render.Finish = r300RenderFinish;
|
||||
tnl->Driver.Render.PrimitiveNotify = r300RenderPrimitive;
|
||||
tnl->Driver.Render.ResetLineStipple = r300ResetLineStipple;
|
||||
tnl->Driver.Render.BuildVertices = _tnl_build_vertices;
|
||||
tnl->Driver.Render.CopyPV = _tnl_copy_pv;
|
||||
tnl->Driver.Render.Interp = _tnl_interp;
|
||||
|
||||
/* FIXME: what are these numbers? */
|
||||
_tnl_init_vertices( ctx, ctx->Const.MaxArrayLockSize + 12,
|
||||
48 * sizeof(GLfloat) );
|
||||
|
||||
rmesa->swtcl.verts = (GLubyte *)tnl->clipspace.vertex_buf;
|
||||
rmesa->swtcl.RenderIndex = ~0;
|
||||
rmesa->swtcl.render_primitive = GL_TRIANGLES;
|
||||
rmesa->swtcl.hw_primitive = 0;
|
||||
|
||||
_tnl_invalidate_vertex_state( ctx, ~0 );
|
||||
_tnl_invalidate_vertices( ctx, ~0 );
|
||||
RENDERINPUTS_ZERO( rmesa->tnl_index_bitset );
|
||||
|
||||
_tnl_need_projected_coords( ctx, GL_FALSE );
|
||||
r300ChooseRenderState(ctx);
|
||||
|
||||
_mesa_validate_all_lighting_tables( ctx );
|
||||
|
||||
tnl->Driver.NotifyMaterialChange =
|
||||
_mesa_validate_all_lighting_tables;
|
||||
}
|
||||
|
||||
void r300DestroySwtcl(GLcontext *ctx)
|
||||
{
|
||||
}
|
||||
|
||||
void r300EmitVertexAOS(r300ContextPtr rmesa, GLuint vertex_size, GLuint offset)
|
||||
{
|
||||
int cmd_reserved = 0;
|
||||
int cmd_written = 0;
|
||||
|
||||
drm_radeon_cmd_header_t *cmd = NULL;
|
||||
if (RADEON_DEBUG & DEBUG_VERTS)
|
||||
fprintf(stderr, "%s: vertex_size %d, offset 0x%x \n",
|
||||
__FUNCTION__, vertex_size, offset);
|
||||
|
||||
start_packet3(CP_PACKET3(R300_PACKET3_3D_LOAD_VBPNTR, 2), 2);
|
||||
e32(1);
|
||||
e32(vertex_size | (vertex_size << 8));
|
||||
e32(offset);
|
||||
}
|
||||
|
||||
void r300EmitVbufPrim(r300ContextPtr rmesa, GLuint primitive, GLuint vertex_nr)
|
||||
{
|
||||
|
||||
int cmd_reserved = 0;
|
||||
int cmd_written = 0;
|
||||
int type, num_verts;
|
||||
drm_radeon_cmd_header_t *cmd = NULL;
|
||||
|
||||
type = r300PrimitiveType(rmesa, primitive);
|
||||
num_verts = r300NumVerts(rmesa, vertex_nr, primitive);
|
||||
|
||||
start_packet3(CP_PACKET3(R300_PACKET3_3D_DRAW_VBUF_2, 0), 0);
|
||||
e32(R300_VAP_VF_CNTL__PRIM_WALK_VERTEX_LIST | (num_verts << 16) | type);
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
The Weather Channel (TM) funded Tungsten Graphics to develop the
|
||||
initial release of the Radeon 8500 driver under the XFree86 license.
|
||||
This notice must be preserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the
|
||||
next paragraph) shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Authors:
|
||||
* Keith Whitwell <keith@tungstengraphics.com> - original r200 code
|
||||
* Dave Airlie <airlied@linux.ie>
|
||||
*/
|
||||
|
||||
#ifndef __R300_SWTCL_H__
|
||||
#define __R300_SWTCL_H__
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "swrast/swrast.h"
|
||||
#include "r300_context.h"
|
||||
|
||||
extern void r300InitSwtcl( GLcontext *ctx );
|
||||
extern void r300DestroySwtcl( GLcontext *ctx );
|
||||
|
||||
#endif
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.5.1
|
||||
* Version: 7.1
|
||||
*
|
||||
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -63,6 +63,9 @@
|
||||
#include "drivers/common/driverfuncs.h"
|
||||
|
||||
|
||||
/**
|
||||
* Pixel formats we support:
|
||||
*/
|
||||
#define PF_B8G8R8 1
|
||||
#define PF_B8G8R8A8 2
|
||||
#define PF_B5G6R5 3
|
||||
@@ -70,7 +73,7 @@
|
||||
#define PF_CI8 5
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
* Derived from Mesa's GLvisual class.
|
||||
*/
|
||||
struct GLFBDevVisualRec {
|
||||
@@ -80,7 +83,7 @@ struct GLFBDevVisualRec {
|
||||
int pixelFormat;
|
||||
};
|
||||
|
||||
/*
|
||||
/**
|
||||
* Derived from Mesa's GLframebuffer class.
|
||||
*/
|
||||
struct GLFBDevBufferRec {
|
||||
@@ -92,7 +95,7 @@ struct GLFBDevBufferRec {
|
||||
GLuint bytesPerPixel;
|
||||
};
|
||||
|
||||
/*
|
||||
/**
|
||||
* Derived from Mesa's GLcontext class.
|
||||
*/
|
||||
struct GLFBDevContextRec {
|
||||
@@ -103,7 +106,7 @@ struct GLFBDevContextRec {
|
||||
GLFBDevBufferPtr curBuffer;
|
||||
};
|
||||
|
||||
/*
|
||||
/**
|
||||
* Derived from Mesa's gl_renderbuffer class.
|
||||
*/
|
||||
struct GLFBDevRenderbufferRec {
|
||||
@@ -114,11 +117,6 @@ struct GLFBDevRenderbufferRec {
|
||||
};
|
||||
|
||||
|
||||
|
||||
#define GLFBDEV_CONTEXT(CTX) ((GLFBDevContextPtr) (CTX))
|
||||
#define GLFBDEV_BUFFER(BUF) ((GLFBDevBufferPtr) (BUF))
|
||||
|
||||
|
||||
/**********************************************************************/
|
||||
/* Internal device driver functions */
|
||||
/**********************************************************************/
|
||||
@@ -151,7 +149,7 @@ update_state( GLcontext *ctx, GLuint new_state )
|
||||
static void
|
||||
get_buffer_size( GLframebuffer *buffer, GLuint *width, GLuint *height )
|
||||
{
|
||||
const GLFBDevBufferPtr fbdevbuffer = GLFBDEV_BUFFER(buffer);
|
||||
const GLFBDevBufferPtr fbdevbuffer = (GLFBDevBufferPtr) buffer;
|
||||
*width = fbdevbuffer->var.xres;
|
||||
*height = fbdevbuffer->var.yres;
|
||||
}
|
||||
@@ -389,8 +387,8 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
|
||||
/* ignored for now */
|
||||
break;
|
||||
case GLFBDEV_MULTISAMPLE:
|
||||
numSamples = attrib[1];
|
||||
attrib++;
|
||||
numSamples = attrib[1];
|
||||
attrib++;
|
||||
break;
|
||||
default:
|
||||
/* unexpected token */
|
||||
@@ -406,36 +404,36 @@ glFBDevCreateVisual( const struct fb_fix_screeninfo *fixInfo,
|
||||
alphaBits = varInfo->transp.length;
|
||||
|
||||
if (fixInfo->visual == FB_VISUAL_TRUECOLOR ||
|
||||
fixInfo->visual == FB_VISUAL_DIRECTCOLOR) {
|
||||
if(varInfo->bits_per_pixel == 24
|
||||
&& varInfo->red.offset == 16
|
||||
&& varInfo->green.offset == 8
|
||||
&& varInfo->blue.offset == 0)
|
||||
vis->pixelFormat = PF_B8G8R8;
|
||||
|
||||
else if(varInfo->bits_per_pixel == 32
|
||||
&& varInfo->red.offset == 16
|
||||
&& varInfo->green.offset == 8
|
||||
&& varInfo->blue.offset == 0)
|
||||
vis->pixelFormat = PF_B8G8R8A8;
|
||||
|
||||
else if(varInfo->bits_per_pixel == 16
|
||||
&& varInfo->red.offset == 11
|
||||
&& varInfo->green.offset == 5
|
||||
&& varInfo->blue.offset == 0)
|
||||
vis->pixelFormat = PF_B5G6R5;
|
||||
|
||||
else if(varInfo->bits_per_pixel == 16
|
||||
&& varInfo->red.offset == 10
|
||||
&& varInfo->green.offset == 5
|
||||
&& varInfo->blue.offset == 0)
|
||||
vis->pixelFormat = PF_B5G5R5;
|
||||
|
||||
else {
|
||||
_mesa_problem(NULL, "Unsupported fbdev RGB visual/bitdepth!\n");
|
||||
_mesa_free(vis);
|
||||
return NULL;
|
||||
}
|
||||
fixInfo->visual == FB_VISUAL_DIRECTCOLOR) {
|
||||
if (varInfo->bits_per_pixel == 24
|
||||
&& varInfo->red.offset == 16
|
||||
&& varInfo->green.offset == 8
|
||||
&& varInfo->blue.offset == 0) {
|
||||
vis->pixelFormat = PF_B8G8R8;
|
||||
}
|
||||
else if (varInfo->bits_per_pixel == 32
|
||||
&& varInfo->red.offset == 16
|
||||
&& varInfo->green.offset == 8
|
||||
&& varInfo->blue.offset == 0) {
|
||||
vis->pixelFormat = PF_B8G8R8A8;
|
||||
}
|
||||
else if (varInfo->bits_per_pixel == 16
|
||||
&& varInfo->red.offset == 11
|
||||
&& varInfo->green.offset == 5
|
||||
&& varInfo->blue.offset == 0) {
|
||||
vis->pixelFormat = PF_B5G6R5;
|
||||
}
|
||||
else if (varInfo->bits_per_pixel == 16
|
||||
&& varInfo->red.offset == 10
|
||||
&& varInfo->green.offset == 5
|
||||
&& varInfo->blue.offset == 0) {
|
||||
vis->pixelFormat = PF_B5G5R5;
|
||||
}
|
||||
else {
|
||||
_mesa_problem(NULL, "Unsupported fbdev RGB visual/bitdepth!\n");
|
||||
_mesa_free(vis);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -578,7 +576,7 @@ new_glfbdev_renderbuffer(void *bufferStart, const GLFBDevVisualPtr visual)
|
||||
|
||||
rb->rowStride = visual->var.xres_virtual * visual->var.bits_per_pixel / 8;
|
||||
rb->bottom = (GLubyte *) bufferStart
|
||||
+ (visual->var.yres - 1) * rb->rowStride;
|
||||
+ (visual->var.yres - 1) * rb->rowStride;
|
||||
|
||||
rb->Base.Width = visual->var.xres;
|
||||
rb->Base.Height = visual->var.yres;
|
||||
@@ -635,7 +633,7 @@ glFBDevCreateBuffer( const struct fb_fix_screeninfo *fixInfo,
|
||||
&frontrb->Base);
|
||||
/* add back renderbuffer */
|
||||
if (visual->glvisual.doubleBufferMode) {
|
||||
int malloced = !backBuffer;
|
||||
const int malloced = !backBuffer;
|
||||
if (malloced) {
|
||||
/* malloc a back buffer */
|
||||
backBuffer = _mesa_malloc(size);
|
||||
@@ -647,8 +645,11 @@ glFBDevCreateBuffer( const struct fb_fix_screeninfo *fixInfo,
|
||||
}
|
||||
|
||||
backrb = new_glfbdev_renderbuffer(backBuffer, visual);
|
||||
if(malloced)
|
||||
backrb->mallocedBuffer = GL_TRUE;
|
||||
if (!backrb) {
|
||||
/* out of mem */
|
||||
return NULL;
|
||||
}
|
||||
backrb->mallocedBuffer = malloced;
|
||||
|
||||
_mesa_add_renderbuffer(&buf->glframebuffer, BUFFER_BACK_LEFT,
|
||||
&backrb->Base);
|
||||
@@ -682,16 +683,10 @@ glFBDevDestroyBuffer( GLFBDevBufferPtr buffer )
|
||||
if (buffer == curDraw || buffer == curRead) {
|
||||
glFBDevMakeCurrent( NULL, NULL, NULL);
|
||||
}
|
||||
#if 0
|
||||
/* free the software depth, stencil, accum buffers */
|
||||
_mesa_free_framebuffer_data(&buffer->glframebuffer);
|
||||
_mesa_free(buffer);
|
||||
#else
|
||||
{
|
||||
struct gl_framebuffer *fb = &buffer->glframebuffer;
|
||||
_mesa_unreference_framebuffer(&fb);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -339,7 +339,7 @@ WINGDIAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc)
|
||||
}
|
||||
|
||||
WINGDIAPI BOOL GLAPIENTRY wglSetPixelFormat(HDC hdc,int iPixelFormat,
|
||||
PIXELFORMATDESCRIPTOR *ppfd)
|
||||
const PIXELFORMATDESCRIPTOR *ppfd)
|
||||
{
|
||||
(void) hdc;
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
#include "context.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "glapioffsets.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/glapioffsets.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
typedef void (GLAPIENTRY *array_func)( const void * );
|
||||
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
|
||||
|
||||
#include "glheader.h"
|
||||
#include "glapi.h"
|
||||
#include "glapitable.h"
|
||||
#include "macros.h"
|
||||
#include "colormac.h"
|
||||
#include "api_loopback.h"
|
||||
#include "glthread.h"
|
||||
#include "mtypes.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/glapi.h"
|
||||
#include "glapi/glapitable.h"
|
||||
#include "glapi/glthread.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
/* KW: A set of functions to convert unusual Color/Normal/Vertex/etc
|
||||
* calls to a smaller set of driver-provided formats. Currently just
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "light.h"
|
||||
#include "macros.h"
|
||||
#include "dlist.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "bufferobj.h"
|
||||
#endif
|
||||
#include "arrayobj.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -97,12 +97,9 @@
|
||||
#include "fog.h"
|
||||
#include "framebuffer.h"
|
||||
#include "get.h"
|
||||
#include "glthread.h"
|
||||
#include "glapioffsets.h"
|
||||
#include "histogram.h"
|
||||
#include "hint.h"
|
||||
#include "hash.h"
|
||||
#include "atifragshader.h"
|
||||
#include "light.h"
|
||||
#include "lines.h"
|
||||
#include "macros.h"
|
||||
@@ -110,9 +107,6 @@
|
||||
#include "pixel.h"
|
||||
#include "points.h"
|
||||
#include "polygon.h"
|
||||
#if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
|
||||
#include "program.h"
|
||||
#endif
|
||||
#include "queryobj.h"
|
||||
#include "rastpos.h"
|
||||
#include "simple_list.h"
|
||||
@@ -126,13 +120,19 @@
|
||||
#include "varray.h"
|
||||
#include "version.h"
|
||||
#include "vtxfmt.h"
|
||||
#include "glapi/glthread.h"
|
||||
#include "glapi/glapioffsets.h"
|
||||
#if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
|
||||
#include "shader/program.h"
|
||||
#endif
|
||||
#include "shader/shader_api.h"
|
||||
#include "shader/atifragshader.h"
|
||||
#if _HAVE_FULL_GL
|
||||
#include "math/m_translate.h"
|
||||
#include "math/m_matrix.h"
|
||||
#include "math/m_xform.h"
|
||||
#include "math/mathmod.h"
|
||||
#endif
|
||||
#include "shader_api.h"
|
||||
|
||||
#ifdef USE_SPARC_ASM
|
||||
#include "sparc/sparc.h"
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
#define CONTEXT_H
|
||||
|
||||
|
||||
#include "glapi.h"
|
||||
#include "glapi/glapi.h"
|
||||
#include "imports.h"
|
||||
#include "mtypes.h"
|
||||
|
||||
|
||||
@@ -33,10 +33,6 @@
|
||||
#include "api_arrayelt.h"
|
||||
#include "api_loopback.h"
|
||||
#include "config.h"
|
||||
#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
|
||||
#include "arbprogram.h"
|
||||
#include "program.h"
|
||||
#endif
|
||||
#include "attrib.h"
|
||||
#include "blend.h"
|
||||
#include "buffers.h"
|
||||
@@ -57,7 +53,7 @@
|
||||
#include "extensions.h"
|
||||
#include "feedback.h"
|
||||
#include "get.h"
|
||||
#include "glapi.h"
|
||||
#include "glapi/glapi.h"
|
||||
#include "hash.h"
|
||||
#include "histogram.h"
|
||||
#include "image.h"
|
||||
@@ -76,18 +72,22 @@
|
||||
#include "texstate.h"
|
||||
#include "mtypes.h"
|
||||
#include "varray.h"
|
||||
#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
|
||||
#include "shader/arbprogram.h"
|
||||
#include "shader/program.h"
|
||||
#endif
|
||||
#if FEATURE_NV_vertex_program || FEATURE_NV_fragment_program
|
||||
#include "nvprogram.h"
|
||||
#include "program.h"
|
||||
#include "shader/nvprogram.h"
|
||||
#include "shader/program.h"
|
||||
#endif
|
||||
#if FEATURE_ATI_fragment_shader
|
||||
#include "atifragshader.h"
|
||||
#include "shader/atifragshader.h"
|
||||
#endif
|
||||
|
||||
#include "math/m_matrix.h"
|
||||
#include "math/m_xform.h"
|
||||
|
||||
#include "dispatch.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
|
||||
#include "imports.h"
|
||||
#include "glthread.h"
|
||||
#include "glapi/glthread.h"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "glthread.h"
|
||||
#include "glapi/glthread.h"
|
||||
#include "hash.h"
|
||||
|
||||
|
||||
|
||||
+64
-41
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 7.0
|
||||
* Version: 7.1
|
||||
*
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
@@ -3648,11 +3648,13 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n,
|
||||
* Try simple cases first
|
||||
*/
|
||||
if (transferOps == 0 &&
|
||||
!ctx->Pixel.MapStencilFlag &&
|
||||
srcType == GL_UNSIGNED_BYTE &&
|
||||
dstType == GL_UNSIGNED_BYTE) {
|
||||
_mesa_memcpy(dest, source, n * sizeof(GLubyte));
|
||||
}
|
||||
else if (transferOps == 0 &&
|
||||
!ctx->Pixel.MapStencilFlag &&
|
||||
srcType == GL_UNSIGNED_INT &&
|
||||
dstType == GL_UNSIGNED_INT &&
|
||||
!srcPacking->SwapBytes) {
|
||||
@@ -3668,19 +3670,17 @@ _mesa_unpack_stencil_span( const GLcontext *ctx, GLuint n,
|
||||
extract_uint_indexes(n, indexes, GL_STENCIL_INDEX, srcType, source,
|
||||
srcPacking);
|
||||
|
||||
if (transferOps) {
|
||||
if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
|
||||
/* shift and offset indexes */
|
||||
shift_and_offset_ci(ctx, n, indexes);
|
||||
}
|
||||
if (transferOps & IMAGE_SHIFT_OFFSET_BIT) {
|
||||
/* shift and offset indexes */
|
||||
shift_and_offset_ci(ctx, n, indexes);
|
||||
}
|
||||
|
||||
if (ctx->Pixel.MapStencilFlag) {
|
||||
/* Apply stencil lookup table */
|
||||
GLuint mask = ctx->PixelMaps.StoS.Size - 1;
|
||||
GLuint i;
|
||||
for (i=0;i<n;i++) {
|
||||
indexes[i] = ctx->PixelMaps.StoS.Map[ indexes[i] & mask ];
|
||||
}
|
||||
if (ctx->Pixel.MapStencilFlag) {
|
||||
/* Apply stencil lookup table */
|
||||
const GLuint mask = ctx->PixelMaps.StoS.Size - 1;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
indexes[i] = ctx->PixelMaps.StoS.Map[ indexes[i] & mask ];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3878,7 +3878,7 @@ _mesa_pack_stencil_span( const GLcontext *ctx, GLuint n,
|
||||
SWAP4BYTE(value); \
|
||||
} \
|
||||
} \
|
||||
depthValues[i] = CLAMP(GLTYPE2FLOAT(value), 0.0F, 1.0F); \
|
||||
depthValues[i] = GLTYPE2FLOAT(value); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
@@ -3889,6 +3889,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
const struct gl_pixelstore_attrib *srcPacking )
|
||||
{
|
||||
GLfloat depthTemp[MAX_WIDTH], *depthValues;
|
||||
GLboolean needClamp = GL_FALSE;
|
||||
|
||||
/* Look for special cases first.
|
||||
* Not only are these faster, they're less prone to numeric conversion
|
||||
@@ -3918,7 +3919,7 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
/* XXX may want to add additional cases here someday */
|
||||
}
|
||||
|
||||
/* general case path */
|
||||
/* general case path follows */
|
||||
|
||||
if (dstType == GL_FLOAT) {
|
||||
depthValues = (GLfloat *) dest;
|
||||
@@ -3927,29 +3928,31 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
depthValues = depthTemp;
|
||||
}
|
||||
|
||||
/* XXX we need to obey srcPacking->SwapBytes here!!! */
|
||||
(void) srcPacking;
|
||||
|
||||
/* convert incoming values to GLfloat */
|
||||
/* Convert incoming values to GLfloat. Some conversions will require
|
||||
* clamping, below.
|
||||
*/
|
||||
switch (srcType) {
|
||||
case GL_BYTE:
|
||||
DEPTH_VALUES(GLbyte, BYTE_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLbyte, BYTE_TO_FLOAT);
|
||||
needClamp = GL_TRUE;
|
||||
break;
|
||||
case GL_UNSIGNED_BYTE:
|
||||
DEPTH_VALUES(GLubyte, UBYTE_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLubyte, UBYTE_TO_FLOAT);
|
||||
break;
|
||||
case GL_SHORT:
|
||||
DEPTH_VALUES(GLshort, SHORT_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLshort, SHORT_TO_FLOAT);
|
||||
needClamp = GL_TRUE;
|
||||
break;
|
||||
case GL_UNSIGNED_SHORT:
|
||||
DEPTH_VALUES(GLushort, USHORT_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLushort, USHORT_TO_FLOAT);
|
||||
break;
|
||||
case GL_INT:
|
||||
DEPTH_VALUES(GLint, INT_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLint, INT_TO_FLOAT);
|
||||
needClamp = GL_TRUE;
|
||||
break;
|
||||
case GL_UNSIGNED_INT:
|
||||
DEPTH_VALUES(GLuint, UINT_TO_FLOAT);
|
||||
break;
|
||||
DEPTH_VALUES(GLuint, UINT_TO_FLOAT);
|
||||
break;
|
||||
case GL_UNSIGNED_INT_24_8_EXT: /* GL_EXT_packed_depth_stencil */
|
||||
if (dstType == GL_UNSIGNED_INT &&
|
||||
depthScale == (GLfloat) 0xffffff &&
|
||||
@@ -3981,19 +3984,21 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
}
|
||||
break;
|
||||
case GL_FLOAT:
|
||||
DEPTH_VALUES(GLfloat, 1*);
|
||||
break;
|
||||
DEPTH_VALUES(GLfloat, 1*);
|
||||
needClamp = GL_TRUE;
|
||||
break;
|
||||
case GL_HALF_FLOAT_ARB:
|
||||
{
|
||||
GLuint i;
|
||||
const GLhalfARB *src = (const GLhalfARB *) source;
|
||||
for (i = 0; i < n; i++) {
|
||||
GLhalfARB value = src[i];
|
||||
if (srcPacking->SwapBytes) {
|
||||
SWAP2BYTE(value);
|
||||
}
|
||||
GLhalfARB value = src[i];
|
||||
if (srcPacking->SwapBytes) {
|
||||
SWAP2BYTE(value);
|
||||
}
|
||||
depthValues[i] = _mesa_half_to_float(value);
|
||||
}
|
||||
needClamp = GL_TRUE;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -4001,12 +4006,30 @@ _mesa_unpack_depth_span( const GLcontext *ctx, GLuint n,
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* apply depth scale and bias and clamp to [0,1] */
|
||||
if (ctx->Pixel.DepthScale != 1.0 || ctx->Pixel.DepthBias != 0.0) {
|
||||
_mesa_scale_and_bias_depth(ctx, n, depthValues);
|
||||
/* apply depth scale and bias */
|
||||
{
|
||||
const GLfloat scale = ctx->Pixel.DepthScale;
|
||||
const GLfloat bias = ctx->Pixel.DepthBias;
|
||||
if (scale != 1.0 || bias != 0.0) {
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = depthValues[i] * scale + bias;
|
||||
}
|
||||
needClamp = GL_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* clamp to [0, 1] */
|
||||
if (needClamp) {
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
depthValues[i] = CLAMP(depthValues[i], 0.0, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert values to dstType
|
||||
*/
|
||||
if (dstType == GL_UNSIGNED_INT) {
|
||||
GLuint *zValues = (GLuint *) dest;
|
||||
GLuint i;
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
#include "glheader.h"
|
||||
#include <GL/internal/glcore.h> /* __GLcontextModes (GLvisual) */
|
||||
#include "config.h" /* Hardwired parameters */
|
||||
#include "glapitable.h"
|
||||
#include "glthread.h"
|
||||
#include "glapi/glapitable.h"
|
||||
#include "glapi/glthread.h"
|
||||
#include "math/m_matrix.h" /* GLmatrix */
|
||||
#include "bitset.h"
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
#include "accum.h"
|
||||
#include "api_loopback.h"
|
||||
#if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
|
||||
#include "arbprogram.h"
|
||||
#include "shader/arbprogram.h"
|
||||
#endif
|
||||
#if FEATURE_ATI_fragment_shader
|
||||
#include "atifragshader.h"
|
||||
#include "shader/atifragshader.h"
|
||||
#endif
|
||||
#include "attrib.h"
|
||||
#include "blend.h"
|
||||
@@ -85,18 +85,18 @@
|
||||
#include "mtypes.h"
|
||||
#include "varray.h"
|
||||
#if FEATURE_NV_vertex_program
|
||||
#include "nvprogram.h"
|
||||
#include "shader/nvprogram.h"
|
||||
#endif
|
||||
#if FEATURE_NV_fragment_program
|
||||
#include "nvprogram.h"
|
||||
#include "program.h"
|
||||
#include "shader/nvprogram.h"
|
||||
#include "shader/program.h"
|
||||
#include "texenvprogram.h"
|
||||
#endif
|
||||
#if FEATURE_ARB_shader_objects
|
||||
#include "shaders.h"
|
||||
#endif
|
||||
#include "debug.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
#include "glheader.h"
|
||||
#include "macros.h"
|
||||
#include "enums.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_print.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_print.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "texenvprogram.h"
|
||||
|
||||
/**
|
||||
@@ -871,7 +871,7 @@ emit_texenv(struct texenv_fragment_program *p, GLuint unit)
|
||||
key->unit[unit].OptRGB);
|
||||
}
|
||||
else if (key->unit[unit].ModeRGB == MODE_DOT3_RGBA_EXT ||
|
||||
key->unit[unit].ModeA == MODE_DOT3_RGBA) {
|
||||
key->unit[unit].ModeRGB == MODE_DOT3_RGBA) {
|
||||
|
||||
out = emit_combine( p, dest, WRITEMASK_XYZW, saturate,
|
||||
unit,
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#include "mtypes.h"
|
||||
#include "varray.h"
|
||||
#include "arrayobj.h"
|
||||
#include "dispatch.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
#define PRE_LOOPBACK( FUNC )
|
||||
#endif
|
||||
|
||||
#include "dispatch.h"
|
||||
#include "glapioffsets.h"
|
||||
#include "glapi/dispatch.h"
|
||||
#include "glapi/glapioffsets.h"
|
||||
|
||||
static void GLAPIENTRY TAG(ArrayElement)( GLint i )
|
||||
{
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "glheader.h"
|
||||
#include "config.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/config.h"
|
||||
#include "m_eval.h"
|
||||
|
||||
static GLfloat inv_tab[MAX_EVAL_ORDER];
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#ifndef _M_EVAL_H
|
||||
#define _M_EVAL_H
|
||||
|
||||
#include "glheader.h"
|
||||
#include "main/glheader.h"
|
||||
|
||||
void _math_init_eval( void );
|
||||
|
||||
|
||||
@@ -26,8 +26,8 @@
|
||||
#ifndef _M_TRANSLATE_H_
|
||||
#define _M_TRANSLATE_H_
|
||||
|
||||
#include "config.h"
|
||||
#include "mtypes.h" /* hack for GLchan */
|
||||
#include "main/config.h"
|
||||
#include "main/mtypes.h" /* hack for GLchan */
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
* 3. Transformation of a point p by a matrix M is: p' = M * p
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "macros.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/macros.h"
|
||||
|
||||
#include "m_eval.h"
|
||||
#include "m_matrix.h"
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
* \author Karl Rasche
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "shader/grammar/grammar_mesa.h"
|
||||
#include "arbprogparse.h"
|
||||
#include "grammar_mesa.h"
|
||||
#include "program.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_statevars.h"
|
||||
@@ -3573,7 +3573,7 @@ parse_instructions(GLcontext * ctx, const GLubyte * inst,
|
||||
|
||||
/* XXX temporary */
|
||||
LONGSTRING static char core_grammar_text[] =
|
||||
#include "grammar_syn.h"
|
||||
#include "shader/grammar/grammar_syn.h"
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_print.h"
|
||||
#include "slang_library_noise.h"
|
||||
#include "shader/slang/slang_library_noise.h"
|
||||
|
||||
|
||||
/* See comments below for info about this */
|
||||
|
||||
@@ -43,10 +43,9 @@
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_print.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "shader_api.h"
|
||||
|
||||
#include "slang_compile.h"
|
||||
#include "slang_link.h"
|
||||
#include "shader/shader_api.h"
|
||||
#include "shader/slang/slang_compile.h"
|
||||
#include "shader/slang/slang_link.h"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -181,6 +181,11 @@ vec2 __constructor(const vec3 v)
|
||||
__retVal.xy = v.xy;
|
||||
}
|
||||
|
||||
vec2 __constructor(const vec4 v)
|
||||
{
|
||||
__retVal.st = v.xy;
|
||||
}
|
||||
|
||||
|
||||
//// vec3 constructors
|
||||
|
||||
|
||||
@@ -18,59 +18,60 @@
|
||||
20,0,0,1,0,10,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,105,0,59,
|
||||
120,120,0,20,0,0,1,0,10,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,98,
|
||||
0,59,120,120,0,20,0,0,1,0,10,1,1,1,0,11,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,
|
||||
0,18,118,0,59,120,121,0,20,0,0,1,0,11,1,1,1,0,9,120,0,0,1,1,0,9,121,0,0,1,1,0,9,122,0,0,0,1,9,18,
|
||||
95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,
|
||||
18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,122,0,20,0,0,1,0,11,1,1,1,0,9,102,0,0,
|
||||
0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,102,0,59,120,120,120,0,20,0,0,1,0,11,1,
|
||||
1,1,0,5,105,0,0,0,1,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,95,95,114,101,116,86,97,
|
||||
108,0,59,120,121,122,0,0,18,105,0,59,120,120,120,0,0,0,0,1,0,11,1,1,1,0,1,98,0,0,0,1,9,18,95,95,
|
||||
114,101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,11,1,1,1,0,12,118,0,0,
|
||||
0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,118,0,59,120,121,122,0,20,0,0,1,0,12,1,
|
||||
1,1,0,9,120,0,0,1,1,0,9,121,0,0,1,1,0,9,122,0,0,1,1,0,9,119,0,0,0,1,9,18,95,95,114,101,116,86,97,
|
||||
108,0,59,120,0,18,120,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,121,0,20,0,9,18,95,95,
|
||||
114,101,116,86,97,108,0,59,122,0,18,122,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,119,
|
||||
0,20,0,0,1,0,12,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,102,0,59,120,120,120,
|
||||
120,0,20,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,105,0,59,120,120,
|
||||
120,120,0,20,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,98,0,59,120,120,
|
||||
120,120,0,20,0,0,1,0,12,1,1,1,0,11,118,51,0,0,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,
|
||||
0,59,120,121,122,0,18,118,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,102,0,20,0,0,1,
|
||||
0,6,1,1,1,0,5,105,0,0,1,1,0,5,106,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,20,
|
||||
0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,9,18,95,
|
||||
95,114,101,116,86,97,108,0,59,120,121,0,18,105,0,59,120,120,0,20,0,0,1,0,6,1,1,1,0,9,102,0,0,0,1,4,
|
||||
102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,
|
||||
102,0,59,120,120,0,0,0,0,1,0,6,1,1,1,0,1,98,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,116,
|
||||
0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,7,1,1,1,0,5,105,0,
|
||||
0,1,1,0,5,106,0,0,1,1,0,5,107,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,20,0,9,
|
||||
18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,
|
||||
0,18,107,0,20,0,0,1,0,7,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,
|
||||
18,105,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,
|
||||
120,121,122,0,18,102,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,
|
||||
86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,8,1,1,1,0,5,120,0,0,1,1,0,5,121,0,
|
||||
0,1,1,0,5,122,0,0,1,1,0,5,119,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,20,0,9,
|
||||
18,95,95,114,101,116,86,97,108,0,59,121,0,18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,
|
||||
0,18,122,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,119,0,20,0,0,1,0,8,1,1,1,0,5,105,0,
|
||||
0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,105,0,59,120,120,120,120,0,20,0,0,1,0,8,1,1,1,0,9,102,
|
||||
0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,18,102,
|
||||
0,59,120,120,120,120,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,98,0,
|
||||
59,120,120,120,120,0,20,0,0,1,0,2,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,0,1,9,18,95,95,114,101,116,
|
||||
86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,0,20,0,0,
|
||||
1,0,2,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,98,0,59,120,120,0,20,
|
||||
0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,3,2,1,10,1,122,101,114,111,0,2,58,118,101,99,50,0,17,48,0,48,0,0,0,
|
||||
17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,
|
||||
121,0,0,18,102,0,59,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,3,2,1,6,1,
|
||||
122,101,114,111,0,2,58,105,118,101,99,50,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,115,
|
||||
101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,105,0,59,120,120,0,0,18,122,101,114,
|
||||
111,0,0,0,0,1,0,3,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,0,1,9,18,95,95,114,101,
|
||||
116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,0,20,
|
||||
0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,9,18,95,
|
||||
95,114,101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,3,1,1,1,0,9,102,0,
|
||||
0,0,1,3,2,1,11,1,122,101,114,111,0,2,58,118,101,99,51,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,48,0,
|
||||
48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,
|
||||
0,18,102,0,59,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,3,2,1,7,1,122,
|
||||
101,114,111,0,2,58,105,118,101,99,51,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,
|
||||
95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,105,0,59,120,120,120,0,0,
|
||||
18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,1,1,0,1,
|
||||
98,52,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,
|
||||
0,18,118,0,59,120,121,0,20,0,0,1,0,10,1,1,1,0,12,118,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,
|
||||
115,116,0,18,118,0,59,120,121,0,20,0,0,1,0,11,1,1,1,0,9,120,0,0,1,1,0,9,121,0,0,1,1,0,9,122,0,0,0,
|
||||
1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,
|
||||
121,0,18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,122,0,20,0,0,1,0,11,1,1,1,0,9,
|
||||
102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,102,0,59,120,120,120,0,20,0,0,1,
|
||||
0,11,1,1,1,0,5,105,0,0,0,1,4,105,110,116,95,116,111,95,102,108,111,97,116,0,18,95,95,114,101,116,
|
||||
86,97,108,0,59,120,121,122,0,0,18,105,0,59,120,120,120,0,0,0,0,1,0,11,1,1,1,0,1,98,0,0,0,1,9,18,95,
|
||||
95,114,101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,11,1,1,1,0,12,118,
|
||||
0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,118,0,59,120,121,122,0,20,0,0,1,0,
|
||||
12,1,1,1,0,9,120,0,0,1,1,0,9,121,0,0,1,1,0,9,122,0,0,1,1,0,9,119,0,0,0,1,9,18,95,95,114,101,116,86,
|
||||
97,108,0,59,120,0,18,120,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,121,0,20,0,9,18,95,
|
||||
95,114,101,116,86,97,108,0,59,122,0,18,122,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,
|
||||
119,0,20,0,0,1,0,12,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,102,0,59,120,120,
|
||||
120,120,0,20,0,0,1,0,12,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,105,0,59,120,
|
||||
120,120,120,0,20,0,0,1,0,12,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,98,0,59,120,
|
||||
120,120,120,0,20,0,0,1,0,12,1,1,1,0,11,118,51,0,0,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,
|
||||
108,0,59,120,121,122,0,18,118,51,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,102,0,20,0,
|
||||
0,1,0,6,1,1,1,0,5,105,0,0,1,1,0,5,106,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,
|
||||
20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,0,1,0,6,1,1,1,0,5,105,0,0,0,1,9,18,
|
||||
95,95,114,101,116,86,97,108,0,59,120,121,0,18,105,0,59,120,120,0,20,0,0,1,0,6,1,1,1,0,9,102,0,0,0,
|
||||
1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,
|
||||
18,102,0,59,120,120,0,0,0,0,1,0,6,1,1,1,0,1,98,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,
|
||||
116,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,98,0,59,120,120,0,0,0,0,1,0,7,1,1,1,0,5,
|
||||
105,0,0,1,1,0,5,106,0,0,1,1,0,5,107,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,105,0,
|
||||
20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,106,0,20,0,9,18,95,95,114,101,116,86,97,108,0,
|
||||
59,122,0,18,107,0,20,0,0,1,0,7,1,1,1,0,5,105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,
|
||||
122,0,18,105,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,9,102,0,0,0,1,9,18,95,95,114,101,116,86,97,
|
||||
108,0,59,120,121,122,0,18,102,0,59,120,120,120,0,20,0,0,1,0,7,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,
|
||||
101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,8,1,1,1,0,5,120,0,0,1,1,0,
|
||||
5,121,0,0,1,1,0,5,122,0,0,1,1,0,5,119,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,120,0,
|
||||
20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,121,0,20,0,9,18,95,95,114,101,116,86,97,108,0,
|
||||
59,122,0,18,122,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,119,0,18,119,0,20,0,0,1,0,8,1,1,1,0,5,
|
||||
105,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,18,105,0,59,120,120,120,120,0,20,0,0,1,0,8,1,1,1,0,
|
||||
9,102,0,0,0,1,4,102,108,111,97,116,95,116,111,95,105,110,116,0,18,95,95,114,101,116,86,97,108,0,0,
|
||||
18,102,0,59,120,120,120,120,0,0,0,0,1,0,8,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,
|
||||
18,98,0,59,120,120,120,120,0,20,0,0,1,0,2,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,0,1,9,18,95,95,114,
|
||||
101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,
|
||||
0,20,0,0,1,0,2,1,1,1,0,1,98,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,121,0,18,98,0,59,120,
|
||||
120,0,20,0,0,1,0,2,1,1,1,0,9,102,0,0,0,1,3,2,1,10,1,122,101,114,111,0,2,58,118,101,99,50,0,17,48,0,
|
||||
48,0,0,0,17,48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,
|
||||
59,120,121,0,0,18,102,0,59,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,2,1,1,1,0,5,105,0,0,0,1,3,2,
|
||||
1,6,1,122,101,114,111,0,2,58,105,118,101,99,50,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,99,52,95,
|
||||
115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,0,0,18,105,0,59,120,120,0,0,18,122,101,
|
||||
114,111,0,0,0,0,1,0,3,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,0,1,9,18,95,95,114,
|
||||
101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,121,0,18,98,50,
|
||||
0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,0,1,0,3,1,1,1,0,1,98,0,0,0,1,9,
|
||||
18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,18,98,0,59,120,120,120,0,20,0,0,1,0,3,1,1,1,0,9,
|
||||
102,0,0,0,1,3,2,1,11,1,122,101,114,111,0,2,58,118,101,99,51,0,17,48,0,48,0,0,0,17,48,0,48,0,0,0,17,
|
||||
48,0,48,0,0,0,0,0,0,4,118,101,99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,
|
||||
122,0,0,18,102,0,59,120,120,120,0,0,18,122,101,114,111,0,0,0,0,1,0,3,1,1,1,0,5,105,0,0,0,1,3,2,1,7,
|
||||
1,122,101,114,111,0,2,58,105,118,101,99,51,0,16,8,48,0,0,16,8,48,0,0,16,8,48,0,0,0,0,0,4,118,101,
|
||||
99,52,95,115,101,113,0,18,95,95,114,101,116,86,97,108,0,59,120,121,122,0,0,18,105,0,59,120,120,120,
|
||||
0,0,18,122,101,114,111,0,0,0,0,1,0,4,1,1,1,0,1,98,49,0,0,1,1,0,1,98,50,0,0,1,1,0,1,98,51,0,0,1,1,0,
|
||||
1,98,52,0,0,0,1,9,18,95,95,114,101,116,86,97,108,0,59,120,0,18,98,49,0,20,0,9,18,95,95,114,101,116,
|
||||
86,97,108,0,59,121,0,18,98,50,0,20,0,9,18,95,95,114,101,116,86,97,108,0,59,122,0,18,98,51,0,20,0,9,
|
||||
18,95,95,114,101,116,86,97,108,0,59,119,0,18,98,52,0,20,0,0,1,0,4,1,1,1,0,1,98,0,0,0,1,9,18,95,95,
|
||||
114,101,116,86,97,108,0,59,120,121,122,119,0,18,98,0,59,120,120,120,120,0,20,0,0,1,0,4,1,1,1,0,9,
|
||||
@@ -646,7 +647,7 @@
|
||||
1,0,12,2,21,1,1,0,15,109,0,0,1,1,0,12,118,0,0,0,1,2,3,2,0,12,1,114,48,0,0,0,9,18,114,48,0,59,120,0,
|
||||
18,109,0,16,8,48,0,57,59,120,0,20,0,9,18,114,48,0,59,121,0,18,109,0,16,10,49,0,57,59,120,0,20,0,9,
|
||||
18,114,48,0,59,122,0,18,109,0,16,10,50,0,57,59,120,0,20,0,9,18,114,48,0,59,119,0,18,109,0,16,10,51,
|
||||
0,57,59,120,0,20,0,4,118,101,99,52,95,100,111,116,0,18,95,95,114,101,116,86,97,108,0,59,120,0,0,18,
|
||||
0,57,59,120,0,20,0,4,118,101,99,52,95,100,111,116,0,18,95,95,114,101,116,86,97,108,0,59,115,0,0,18,
|
||||
114,48,0,0,18,118,0,0,0,0,2,3,2,0,12,1,114,49,0,0,0,9,18,114,49,0,59,120,0,18,109,0,16,8,48,0,57,
|
||||
59,121,0,20,0,9,18,114,49,0,59,121,0,18,109,0,16,10,49,0,57,59,121,0,20,0,9,18,114,49,0,59,122,0,
|
||||
18,109,0,16,10,50,0,57,59,121,0,20,0,9,18,114,49,0,59,119,0,18,109,0,16,10,51,0,57,59,121,0,20,0,4,
|
||||
|
||||
@@ -28,14 +28,14 @@
|
||||
* \author Brian Paul
|
||||
*/
|
||||
|
||||
#include "imports.h"
|
||||
#include "slang_builtin.h"
|
||||
#include "slang_ir.h"
|
||||
#include "mtypes.h"
|
||||
#include "program.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "shader/slang/slang_ir.h"
|
||||
#include "shader/slang/slang_builtin.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#ifndef SLANG_BUILTIN_H
|
||||
#define SLANG_BUILTIN_H
|
||||
|
||||
#include "prog_parameter.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "slang_utility.h"
|
||||
#include "slang_ir.h"
|
||||
|
||||
|
||||
@@ -37,13 +37,13 @@
|
||||
|
||||
|
||||
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "program.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "slang_typeinfo.h"
|
||||
#include "slang_codegen.h"
|
||||
#include "slang_compile.h"
|
||||
@@ -1261,15 +1261,23 @@ make_writemask(const char *field)
|
||||
while (*field) {
|
||||
switch (*field) {
|
||||
case 'x':
|
||||
case 's':
|
||||
case 'r':
|
||||
mask |= WRITEMASK_X;
|
||||
break;
|
||||
case 'y':
|
||||
case 't':
|
||||
case 'g':
|
||||
mask |= WRITEMASK_Y;
|
||||
break;
|
||||
case 'z':
|
||||
case 'p':
|
||||
case 'b':
|
||||
mask |= WRITEMASK_Z;
|
||||
break;
|
||||
case 'w':
|
||||
case 'q':
|
||||
case 'a':
|
||||
mask |= WRITEMASK_W;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
* \author Michal Krol
|
||||
*/
|
||||
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "program.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "grammar_mesa.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/grammar/grammar_mesa.h"
|
||||
#include "slang_codegen.h"
|
||||
#include "slang_compile.h"
|
||||
#include "slang_preprocess.h"
|
||||
|
||||
@@ -36,13 +36,13 @@
|
||||
***/
|
||||
|
||||
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "program.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_print.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_print.h"
|
||||
#include "slang_builtin.h"
|
||||
#include "slang_emit.h"
|
||||
#include "slang_mem.h"
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include "context.h"
|
||||
#include "slang_ir.h"
|
||||
#include "slang_mem.h"
|
||||
#include "prog_print.h"
|
||||
#include "shader/prog_print.h"
|
||||
|
||||
|
||||
static const slang_ir_info IrInfo[] = {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef SLANG_LABEL_H
|
||||
#define SLANG_LABEL_H 1
|
||||
|
||||
#include "imports.h"
|
||||
#include "mtypes.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
|
||||
|
||||
struct slang_label_
|
||||
|
||||
@@ -28,16 +28,16 @@
|
||||
* \author Brian Paul
|
||||
*/
|
||||
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "hash.h"
|
||||
#include "macros.h"
|
||||
#include "program.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_print.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "shader_api.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/hash.h"
|
||||
#include "main/macros.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_print.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "shader/shader_api.h"
|
||||
#include "slang_link.h"
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
*/
|
||||
|
||||
#include "imports.h"
|
||||
#include "grammar_mesa.h"
|
||||
#include "shader/grammar/grammar_mesa.h"
|
||||
#include "slang_preprocess.h"
|
||||
|
||||
LONGSTRING static const char *slang_pp_directives_syn =
|
||||
|
||||
@@ -28,12 +28,12 @@
|
||||
* \author Michal Krol
|
||||
*/
|
||||
|
||||
#include "imports.h"
|
||||
#include "main/imports.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "slang_typeinfo.h"
|
||||
#include "slang_compile.h"
|
||||
#include "slang_log.h"
|
||||
#include "slang_mem.h"
|
||||
#include "prog_instruction.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
|
||||
#include "imports.h"
|
||||
#include "main/imports.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "slang_compile.h"
|
||||
#include "slang_compile_variable.h"
|
||||
#include "slang_mem.h"
|
||||
#include "slang_vartable.h"
|
||||
#include "slang_ir.h"
|
||||
#include "prog_instruction.h"
|
||||
|
||||
|
||||
static int dbg = 0;
|
||||
|
||||
@@ -23,11 +23,10 @@
|
||||
#include "glheader.h"
|
||||
#include "colormac.h"
|
||||
#include "context.h"
|
||||
#include "atifragshader.h"
|
||||
#include "macros.h"
|
||||
#include "program.h"
|
||||
|
||||
#include "s_atifragshader.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/atifragshader.h"
|
||||
#include "swrast/s_atifragshader.h"
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
#include "context.h"
|
||||
#include "colormac.h"
|
||||
#include "mtypes.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "teximage.h"
|
||||
#include "swrast.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "s_blend.h"
|
||||
#include "s_context.h"
|
||||
#include "s_lines.h"
|
||||
|
||||
@@ -43,10 +43,10 @@
|
||||
#ifndef S_CONTEXT_H
|
||||
#define S_CONTEXT_H
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "shader/prog_execute.h"
|
||||
#include "swrast.h"
|
||||
#include "s_span.h"
|
||||
#include "prog_execute.h"
|
||||
|
||||
|
||||
typedef void (*texture_sample_func)(GLcontext *ctx,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 6.5.2
|
||||
* Version: 7.1
|
||||
*
|
||||
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
@@ -398,10 +398,9 @@ draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
|
||||
width, height,
|
||||
GL_COLOR_INDEX, type,
|
||||
row, skipPixels);
|
||||
_mesa_unpack_index_span(ctx, spanWidth, destType, values,
|
||||
type, source, unpack,
|
||||
ctx->_ImageTransferState);
|
||||
_mesa_apply_stencil_transfer_ops(ctx, spanWidth, values);
|
||||
_mesa_unpack_stencil_span(ctx, spanWidth, destType, values,
|
||||
type, source, unpack,
|
||||
ctx->_ImageTransferState);
|
||||
if (zoom) {
|
||||
_swrast_write_zoomed_stencil_span(ctx, x, y, spanWidth,
|
||||
spanX, spanY, values);
|
||||
|
||||
@@ -22,11 +22,11 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "colormac.h"
|
||||
#include "context.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "texstate.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/colormac.h"
|
||||
#include "main/context.h"
|
||||
#include "main/texstate.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
|
||||
#include "s_fragprog.h"
|
||||
#include "s_span.h"
|
||||
|
||||
@@ -393,7 +393,7 @@ static void NAME(GLcontext *ctx, const SWvertex *v0,
|
||||
span.greenStep = 0;
|
||||
span.blueStep = 0;
|
||||
# ifdef INTERP_ALPHA
|
||||
span.attrStepX[FRAG_ATTRIB_COL0][3] = span.attrStepX[FRAG_ATTRIB_COL0][3] = 0.0F;
|
||||
span.attrStepX[FRAG_ATTRIB_COL0][3] = span.attrStepY[FRAG_ATTRIB_COL0][3] = 0.0F;
|
||||
span.alphaStep = 0;
|
||||
# endif
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
#ifndef SWRAST_H
|
||||
#define SWRAST_H
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
/**
|
||||
* \struct SWvertex
|
||||
|
||||
@@ -26,12 +26,12 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "light.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/light.h"
|
||||
|
||||
#include "tnl.h"
|
||||
#include "t_context.h"
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
#ifndef _T_CONTEXT_H
|
||||
#define _T_CONTEXT_H
|
||||
|
||||
#include "glheader.h"
|
||||
#include "mtypes.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
#include "math/m_matrix.h"
|
||||
#include "math/m_vector.h"
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "imports.h"
|
||||
#include "state.h"
|
||||
#include "mtypes.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/state.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
#include "t_context.h"
|
||||
#include "t_pipeline.h"
|
||||
|
||||
@@ -35,16 +35,16 @@
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "imports.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "prog_execute.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "shader/prog_execute.h"
|
||||
#include "swrast/s_context.h"
|
||||
#include "swrast/s_texfilter.h"
|
||||
|
||||
#include "tnl.h"
|
||||
#include "t_context.h"
|
||||
#include "t_pipeline.h"
|
||||
|
||||
#include "swrast/s_context.h"
|
||||
#include "swrast/s_texfilter.h"
|
||||
|
||||
/**
|
||||
* XXX the texture sampling code in this module is a bit of a hack.
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
#include "glheader.h"
|
||||
#include "macros.h"
|
||||
#include "enums.h"
|
||||
#include "program.h"
|
||||
#include "prog_instruction.h"
|
||||
#include "prog_parameter.h"
|
||||
#include "prog_print.h"
|
||||
#include "prog_statevars.h"
|
||||
#include "shader/program.h"
|
||||
#include "shader/prog_instruction.h"
|
||||
#include "shader/prog_parameter.h"
|
||||
#include "shader/prog_print.h"
|
||||
#include "shader/prog_statevars.h"
|
||||
#include "t_context.h" /* NOTE: very light dependency on this */
|
||||
#include "t_vp_build.h"
|
||||
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@
|
||||
#ifndef _TNL_H
|
||||
#define _TNL_H
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@
|
||||
#ifndef _VBO_H
|
||||
#define _VBO_H
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
struct _mesa_prim {
|
||||
GLuint mode:8;
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/api_arrayelt.h"
|
||||
#include "vbo.h"
|
||||
#include "vbo_context.h"
|
||||
#include "imports.h"
|
||||
#include "api_arrayelt.h"
|
||||
|
||||
/* Reach out and grab this to use as the default:
|
||||
*/
|
||||
|
||||
@@ -26,14 +26,14 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "api_arrayelt.h"
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "dlist.h"
|
||||
#include "vtxfmt.h"
|
||||
#include "main/api_arrayelt.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/dlist.h"
|
||||
#include "main/vtxfmt.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#ifndef __VBO_EXEC_H__
|
||||
#define __VBO_EXEC_H__
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "vbo.h"
|
||||
#include "vbo_attrib.h"
|
||||
|
||||
|
||||
+10
-10
@@ -30,16 +30,16 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "vtxfmt.h"
|
||||
#include "dlist.h"
|
||||
#include "state.h"
|
||||
#include "light.h"
|
||||
#include "api_arrayelt.h"
|
||||
#include "api_noop.h"
|
||||
#include "dispatch.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/vtxfmt.h"
|
||||
#include "main/dlist.h"
|
||||
#include "main/state.h"
|
||||
#include "main/light.h"
|
||||
#include "main/api_arrayelt.h"
|
||||
#include "main/api_noop.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -25,12 +25,12 @@
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "state.h"
|
||||
#include "api_validate.h"
|
||||
#include "api_noop.h"
|
||||
#include "dispatch.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/state.h"
|
||||
#include "main/api_validate.h"
|
||||
#include "main/api_noop.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "enums.h"
|
||||
#include "state.h"
|
||||
#include "macros.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/state.h"
|
||||
#include "main/macros.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -25,13 +25,13 @@
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "api_eval.h"
|
||||
#include "context.h"
|
||||
#include "macros.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/api_eval.h"
|
||||
#include "main/context.h"
|
||||
#include "main/macros.h"
|
||||
#include "math/m_eval.h"
|
||||
#include "glapi/dispatch.h"
|
||||
#include "vbo_exec.h"
|
||||
#include "dispatch.h"
|
||||
|
||||
|
||||
static void clear_active_eval1( struct vbo_exec_context *exec, GLuint attr )
|
||||
|
||||
@@ -46,9 +46,9 @@
|
||||
* of zero.
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "mtypes.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
#include "vbo.h"
|
||||
|
||||
|
||||
@@ -26,10 +26,10 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "dlist.h"
|
||||
#include "vtxfmt.h"
|
||||
#include "imports.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/dlist.h"
|
||||
#include "main/vtxfmt.h"
|
||||
#include "main/imports.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#ifndef VBO_SAVE_H
|
||||
#define VBO_SAVE_H
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "vbo.h"
|
||||
#include "vbo_attrib.h"
|
||||
|
||||
|
||||
@@ -67,15 +67,15 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "dlist.h"
|
||||
#include "enums.h"
|
||||
#include "macros.h"
|
||||
#include "api_validate.h"
|
||||
#include "api_arrayelt.h"
|
||||
#include "vtxfmt.h"
|
||||
#include "dispatch.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/dlist.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/api_validate.h"
|
||||
#include "main/api_arrayelt.h"
|
||||
#include "main/vtxfmt.h"
|
||||
#include "glapi/dispatch.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "imports.h"
|
||||
#include "mtypes.h"
|
||||
#include "macros.h"
|
||||
#include "light.h"
|
||||
#include "state.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/context.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/light.h"
|
||||
#include "main/state.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
|
||||
@@ -28,17 +28,17 @@
|
||||
#include "swrast_setup/swrast_setup.h"
|
||||
#include "swrast/swrast.h"
|
||||
#include "tnl/tnl.h"
|
||||
#include "context.h"
|
||||
#include "main/context.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "glapi/dispatch.h"
|
||||
#include "glapi/glapi.h"
|
||||
|
||||
#include "vbo_context.h"
|
||||
|
||||
#include "glheader.h"
|
||||
#include "enums.h"
|
||||
#include "glapi.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "dispatch.h"
|
||||
|
||||
|
||||
typedef void (*attr_func)( GLcontext *ctx, GLint target, const GLfloat * );
|
||||
|
||||
@@ -47,9 +47,9 @@
|
||||
* limitations on drivers which want to use it as a fallback path.
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "mtypes.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
#include "vbo_split.h"
|
||||
#include "vbo.h"
|
||||
|
||||
@@ -29,11 +29,11 @@
|
||||
/* Split indexed primitives with per-vertex copying.
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
#include "imports.h"
|
||||
#include "macros.h"
|
||||
#include "enums.h"
|
||||
#include "mtypes.h"
|
||||
#include "main/glheader.h"
|
||||
#include "main/imports.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/mtypes.h"
|
||||
|
||||
#include "vbo_split.h"
|
||||
#include "vbo.h"
|
||||
|
||||
@@ -27,9 +27,9 @@
|
||||
*/
|
||||
|
||||
|
||||
#include "mtypes.h"
|
||||
#include "macros.h"
|
||||
#include "enums.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/macros.h"
|
||||
#include "main/enums.h"
|
||||
#include "vbo_split.h"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user