Revert DOS line endings.

This commit is contained in:
José Fonseca 2008-05-26 23:29:38 +09:00
parent 77ce568ff7
commit 253066d716
3 changed files with 1494 additions and 1494 deletions

View File

@ -1,341 +1,341 @@
/************************************************************************** /**************************************************************************
* *
* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved. * All Rights Reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the * copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including * "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, * without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to * 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 * permit persons to whom the Software is furnished to do so, subject to
* the following conditions: * the following conditions:
* *
* The above copyright notice and this permission notice (including the * The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions * next paragraph) shall be included in all copies or substantial portions
* of the Software. * of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* *
**************************************************************************/ **************************************************************************/
#ifndef I915_CONTEXT_H #ifndef I915_CONTEXT_H
#define I915_CONTEXT_H #define I915_CONTEXT_H
#include "pipe/p_context.h" #include "pipe/p_context.h"
#include "pipe/p_defines.h" #include "pipe/p_defines.h"
#include "pipe/p_state.h" #include "pipe/p_state.h"
#include "draw/draw_vertex.h" #include "draw/draw_vertex.h"
#include "tgsi/util/tgsi_scan.h" #include "tgsi/util/tgsi_scan.h"
#define I915_TEX_UNITS 8 #define I915_TEX_UNITS 8
#define I915_DYNAMIC_MODES4 0 #define I915_DYNAMIC_MODES4 0
#define I915_DYNAMIC_DEPTHSCALE_0 1 /* just the header */ #define I915_DYNAMIC_DEPTHSCALE_0 1 /* just the header */
#define I915_DYNAMIC_DEPTHSCALE_1 2 #define I915_DYNAMIC_DEPTHSCALE_1 2
#define I915_DYNAMIC_IAB 3 #define I915_DYNAMIC_IAB 3
#define I915_DYNAMIC_BC_0 4 /* just the header */ #define I915_DYNAMIC_BC_0 4 /* just the header */
#define I915_DYNAMIC_BC_1 5 #define I915_DYNAMIC_BC_1 5
#define I915_DYNAMIC_BFO_0 6 #define I915_DYNAMIC_BFO_0 6
#define I915_DYNAMIC_BFO_1 7 #define I915_DYNAMIC_BFO_1 7
#define I915_DYNAMIC_STP_0 8 #define I915_DYNAMIC_STP_0 8
#define I915_DYNAMIC_STP_1 9 #define I915_DYNAMIC_STP_1 9
#define I915_DYNAMIC_SC_ENA_0 10 #define I915_DYNAMIC_SC_ENA_0 10
#define I915_DYNAMIC_SC_RECT_0 11 #define I915_DYNAMIC_SC_RECT_0 11
#define I915_DYNAMIC_SC_RECT_1 12 #define I915_DYNAMIC_SC_RECT_1 12
#define I915_DYNAMIC_SC_RECT_2 13 #define I915_DYNAMIC_SC_RECT_2 13
#define I915_MAX_DYNAMIC 14 #define I915_MAX_DYNAMIC 14
#define I915_IMMEDIATE_S0 0 #define I915_IMMEDIATE_S0 0
#define I915_IMMEDIATE_S1 1 #define I915_IMMEDIATE_S1 1
#define I915_IMMEDIATE_S2 2 #define I915_IMMEDIATE_S2 2
#define I915_IMMEDIATE_S3 3 #define I915_IMMEDIATE_S3 3
#define I915_IMMEDIATE_S4 4 #define I915_IMMEDIATE_S4 4
#define I915_IMMEDIATE_S5 5 #define I915_IMMEDIATE_S5 5
#define I915_IMMEDIATE_S6 6 #define I915_IMMEDIATE_S6 6
#define I915_IMMEDIATE_S7 7 #define I915_IMMEDIATE_S7 7
#define I915_MAX_IMMEDIATE 8 #define I915_MAX_IMMEDIATE 8
/* These must mach the order of LI0_STATE_* bits, as they will be used /* These must mach the order of LI0_STATE_* bits, as they will be used
* to generate hardware packets: * to generate hardware packets:
*/ */
#define I915_CACHE_STATIC 0 #define I915_CACHE_STATIC 0
#define I915_CACHE_DYNAMIC 1 /* handled specially */ #define I915_CACHE_DYNAMIC 1 /* handled specially */
#define I915_CACHE_SAMPLER 2 #define I915_CACHE_SAMPLER 2
#define I915_CACHE_MAP 3 #define I915_CACHE_MAP 3
#define I915_CACHE_PROGRAM 4 #define I915_CACHE_PROGRAM 4
#define I915_CACHE_CONSTANTS 5 #define I915_CACHE_CONSTANTS 5
#define I915_MAX_CACHE 6 #define I915_MAX_CACHE 6
#define I915_MAX_CONSTANT 32 #define I915_MAX_CONSTANT 32
/** See constant_flags[] below */ /** See constant_flags[] below */
#define I915_CONSTFLAG_USER 0x1f #define I915_CONSTFLAG_USER 0x1f
/** /**
* Subclass of pipe_shader_state * Subclass of pipe_shader_state
*/ */
struct i915_fragment_shader struct i915_fragment_shader
{ {
struct pipe_shader_state state; struct pipe_shader_state state;
struct tgsi_shader_info info; struct tgsi_shader_info info;
uint *program; uint *program;
uint program_len; uint program_len;
/** /**
* constants introduced during translation. * constants introduced during translation.
* These are placed at the end of the constant buffer and grow toward * These are placed at the end of the constant buffer and grow toward
* the beginning (eg: slot 31, 30 29, ...) * the beginning (eg: slot 31, 30 29, ...)
* User-provided constants start at 0. * User-provided constants start at 0.
* This allows both types of constants to co-exist (until there's too many) * This allows both types of constants to co-exist (until there's too many)
* and doesn't require regenerating/changing the fragment program to * and doesn't require regenerating/changing the fragment program to
* shuffle constants around. * shuffle constants around.
*/ */
uint num_constants; uint num_constants;
float constants[I915_MAX_CONSTANT][4]; float constants[I915_MAX_CONSTANT][4];
/** /**
* Status of each constant * Status of each constant
* if I915_CONSTFLAG_PARAM, the value must be taken from the corresponding * if I915_CONSTFLAG_PARAM, the value must be taken from the corresponding
* slot of the user's constant buffer. (set by pipe->set_constant_buffer()) * slot of the user's constant buffer. (set by pipe->set_constant_buffer())
* Else, the bitmask indicates which components are occupied by immediates. * Else, the bitmask indicates which components are occupied by immediates.
*/ */
ubyte constant_flags[I915_MAX_CONSTANT]; ubyte constant_flags[I915_MAX_CONSTANT];
}; };
struct i915_cache_context; struct i915_cache_context;
/* Use to calculate differences between state emitted to hardware and /* Use to calculate differences between state emitted to hardware and
* current driver-calculated state. * current driver-calculated state.
*/ */
struct i915_state struct i915_state
{ {
unsigned immediate[I915_MAX_IMMEDIATE]; unsigned immediate[I915_MAX_IMMEDIATE];
unsigned dynamic[I915_MAX_DYNAMIC]; unsigned dynamic[I915_MAX_DYNAMIC];
float constants[PIPE_SHADER_TYPES][I915_MAX_CONSTANT][4]; float constants[PIPE_SHADER_TYPES][I915_MAX_CONSTANT][4];
/** number of constants passed in through a constant buffer */ /** number of constants passed in through a constant buffer */
uint num_user_constants[PIPE_SHADER_TYPES]; uint num_user_constants[PIPE_SHADER_TYPES];
/* texture sampler state */ /* texture sampler state */
unsigned sampler[I915_TEX_UNITS][3]; unsigned sampler[I915_TEX_UNITS][3];
unsigned sampler_enable_flags; unsigned sampler_enable_flags;
unsigned sampler_enable_nr; unsigned sampler_enable_nr;
/* texture image buffers */ /* texture image buffers */
unsigned texbuffer[I915_TEX_UNITS][2]; unsigned texbuffer[I915_TEX_UNITS][2];
/** Describes the current hardware vertex layout */ /** Describes the current hardware vertex layout */
struct vertex_info vertex_info; struct vertex_info vertex_info;
unsigned id; /* track lost context events */ unsigned id; /* track lost context events */
}; };
struct i915_blend_state { struct i915_blend_state {
unsigned iab; unsigned iab;
unsigned modes4; unsigned modes4;
unsigned LIS5; unsigned LIS5;
unsigned LIS6; unsigned LIS6;
}; };
struct i915_depth_stencil_state { struct i915_depth_stencil_state {
unsigned stencil_modes4; unsigned stencil_modes4;
unsigned bfo[2]; unsigned bfo[2];
unsigned stencil_LIS5; unsigned stencil_LIS5;
unsigned depth_LIS6; unsigned depth_LIS6;
}; };
struct i915_rasterizer_state { struct i915_rasterizer_state {
int light_twoside : 1; int light_twoside : 1;
unsigned st; unsigned st;
enum interp_mode color_interp; enum interp_mode color_interp;
unsigned LIS4; unsigned LIS4;
unsigned LIS7; unsigned LIS7;
unsigned sc[1]; unsigned sc[1];
const struct pipe_rasterizer_state *templ; const struct pipe_rasterizer_state *templ;
union { float f; unsigned u; } ds[2]; union { float f; unsigned u; } ds[2];
}; };
struct i915_sampler_state { struct i915_sampler_state {
unsigned state[3]; unsigned state[3];
const struct pipe_sampler_state *templ; const struct pipe_sampler_state *templ;
}; };
struct i915_texture { struct i915_texture {
struct pipe_texture base; struct pipe_texture base;
/* Derived from the above: /* Derived from the above:
*/ */
unsigned pitch; unsigned pitch;
unsigned depth_pitch; /* per-image on i945? */ unsigned depth_pitch; /* per-image on i945? */
unsigned total_height; unsigned total_height;
unsigned nr_images[PIPE_MAX_TEXTURE_LEVELS]; unsigned nr_images[PIPE_MAX_TEXTURE_LEVELS];
/* Explicitly store the offset of each image for each cube face or /* Explicitly store the offset of each image for each cube face or
* depth value. Pretty much have to accept that hardware formats * depth value. Pretty much have to accept that hardware formats
* are going to be so diverse that there is no unified way to * are going to be so diverse that there is no unified way to
* compute the offsets of depth/cube images within a mipmap level, * compute the offsets of depth/cube images within a mipmap level,
* so have to store them as a lookup table: * so have to store them as a lookup table:
*/ */
unsigned *image_offset[PIPE_MAX_TEXTURE_LEVELS]; /**< array [depth] of offsets */ unsigned *image_offset[PIPE_MAX_TEXTURE_LEVELS]; /**< array [depth] of offsets */
/* Includes image offset tables: /* Includes image offset tables:
*/ */
unsigned level_offset[PIPE_MAX_TEXTURE_LEVELS]; unsigned level_offset[PIPE_MAX_TEXTURE_LEVELS];
/* The data is held here: /* The data is held here:
*/ */
struct pipe_buffer *buffer; struct pipe_buffer *buffer;
}; };
struct i915_context struct i915_context
{ {
struct pipe_context pipe; struct pipe_context pipe;
struct i915_winsys *winsys; struct i915_winsys *winsys;
struct draw_context *draw; struct draw_context *draw;
/* The most recent drawing state as set by the driver: /* The most recent drawing state as set by the driver:
*/ */
const struct i915_blend_state *blend; const struct i915_blend_state *blend;
const struct i915_sampler_state *sampler[PIPE_MAX_SAMPLERS]; const struct i915_sampler_state *sampler[PIPE_MAX_SAMPLERS];
const struct i915_depth_stencil_state *depth_stencil; const struct i915_depth_stencil_state *depth_stencil;
const struct i915_rasterizer_state *rasterizer; const struct i915_rasterizer_state *rasterizer;
struct i915_fragment_shader *fs; struct i915_fragment_shader *fs;
struct pipe_blend_color blend_color; struct pipe_blend_color blend_color;
struct pipe_clip_state clip; struct pipe_clip_state clip;
struct pipe_constant_buffer constants[PIPE_SHADER_TYPES]; struct pipe_constant_buffer constants[PIPE_SHADER_TYPES];
struct pipe_framebuffer_state framebuffer; struct pipe_framebuffer_state framebuffer;
struct pipe_poly_stipple poly_stipple; struct pipe_poly_stipple poly_stipple;
struct pipe_scissor_state scissor; struct pipe_scissor_state scissor;
struct i915_texture *texture[PIPE_MAX_SAMPLERS]; struct i915_texture *texture[PIPE_MAX_SAMPLERS];
struct pipe_viewport_state viewport; struct pipe_viewport_state viewport;
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS]; struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
unsigned dirty; unsigned dirty;
unsigned num_samplers; unsigned num_samplers;
unsigned num_textures; unsigned num_textures;
unsigned num_vertex_elements; unsigned num_vertex_elements;
unsigned num_vertex_buffers; unsigned num_vertex_buffers;
unsigned *batch_start; unsigned *batch_start;
/** Vertex buffer */ /** Vertex buffer */
struct pipe_buffer *vbo; struct pipe_buffer *vbo;
struct i915_state current; struct i915_state current;
unsigned hardware_dirty; unsigned hardware_dirty;
unsigned debug; unsigned debug;
}; };
/* A flag for each state_tracker state object: /* A flag for each state_tracker state object:
*/ */
#define I915_NEW_VIEWPORT 0x1 #define I915_NEW_VIEWPORT 0x1
#define I915_NEW_RASTERIZER 0x2 #define I915_NEW_RASTERIZER 0x2
#define I915_NEW_FS 0x4 #define I915_NEW_FS 0x4
#define I915_NEW_BLEND 0x8 #define I915_NEW_BLEND 0x8
#define I915_NEW_CLIP 0x10 #define I915_NEW_CLIP 0x10
#define I915_NEW_SCISSOR 0x20 #define I915_NEW_SCISSOR 0x20
#define I915_NEW_STIPPLE 0x40 #define I915_NEW_STIPPLE 0x40
#define I915_NEW_FRAMEBUFFER 0x80 #define I915_NEW_FRAMEBUFFER 0x80
#define I915_NEW_ALPHA_TEST 0x100 #define I915_NEW_ALPHA_TEST 0x100
#define I915_NEW_DEPTH_STENCIL 0x200 #define I915_NEW_DEPTH_STENCIL 0x200
#define I915_NEW_SAMPLER 0x400 #define I915_NEW_SAMPLER 0x400
#define I915_NEW_TEXTURE 0x800 #define I915_NEW_TEXTURE 0x800
#define I915_NEW_CONSTANTS 0x1000 #define I915_NEW_CONSTANTS 0x1000
#define I915_NEW_VBO 0x2000 #define I915_NEW_VBO 0x2000
#define I915_NEW_VS 0x4000 #define I915_NEW_VS 0x4000
/* Driver's internally generated state flags: /* Driver's internally generated state flags:
*/ */
#define I915_NEW_VERTEX_FORMAT 0x10000 #define I915_NEW_VERTEX_FORMAT 0x10000
/* Dirty flags for hardware emit /* Dirty flags for hardware emit
*/ */
#define I915_HW_STATIC (1<<I915_CACHE_STATIC) #define I915_HW_STATIC (1<<I915_CACHE_STATIC)
#define I915_HW_DYNAMIC (1<<I915_CACHE_DYNAMIC) #define I915_HW_DYNAMIC (1<<I915_CACHE_DYNAMIC)
#define I915_HW_SAMPLER (1<<I915_CACHE_SAMPLER) #define I915_HW_SAMPLER (1<<I915_CACHE_SAMPLER)
#define I915_HW_MAP (1<<I915_CACHE_MAP) #define I915_HW_MAP (1<<I915_CACHE_MAP)
#define I915_HW_PROGRAM (1<<I915_CACHE_PROGRAM) #define I915_HW_PROGRAM (1<<I915_CACHE_PROGRAM)
#define I915_HW_CONSTANTS (1<<I915_CACHE_CONSTANTS) #define I915_HW_CONSTANTS (1<<I915_CACHE_CONSTANTS)
#define I915_HW_IMMEDIATE (1<<(I915_MAX_CACHE+0)) #define I915_HW_IMMEDIATE (1<<(I915_MAX_CACHE+0))
#define I915_HW_INVARIENT (1<<(I915_MAX_CACHE+1)) #define I915_HW_INVARIENT (1<<(I915_MAX_CACHE+1))
/*********************************************************************** /***********************************************************************
* i915_prim_emit.c: * i915_prim_emit.c:
*/ */
struct draw_stage *i915_draw_render_stage( struct i915_context *i915 ); struct draw_stage *i915_draw_render_stage( struct i915_context *i915 );
/*********************************************************************** /***********************************************************************
* i915_prim_vbuf.c: * i915_prim_vbuf.c:
*/ */
struct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 ); struct draw_stage *i915_draw_vbuf_stage( struct i915_context *i915 );
/*********************************************************************** /***********************************************************************
* i915_state_emit.c: * i915_state_emit.c:
*/ */
void i915_emit_hardware_state(struct i915_context *i915 ); void i915_emit_hardware_state(struct i915_context *i915 );
/*********************************************************************** /***********************************************************************
* i915_clear.c: * i915_clear.c:
*/ */
void i915_clear(struct pipe_context *pipe, struct pipe_surface *ps, void i915_clear(struct pipe_context *pipe, struct pipe_surface *ps,
unsigned clearValue); unsigned clearValue);
/*********************************************************************** /***********************************************************************
* i915_surface.c: * i915_surface.c:
*/ */
void i915_init_surface_functions( struct i915_context *i915 ); void i915_init_surface_functions( struct i915_context *i915 );
void i915_init_state_functions( struct i915_context *i915 ); void i915_init_state_functions( struct i915_context *i915 );
void i915_init_flush_functions( struct i915_context *i915 ); void i915_init_flush_functions( struct i915_context *i915 );
void i915_init_string_functions( struct i915_context *i915 ); void i915_init_string_functions( struct i915_context *i915 );
/*********************************************************************** /***********************************************************************
* Inline conversion functions. These are better-typed than the * Inline conversion functions. These are better-typed than the
* macros used previously: * macros used previously:
*/ */
static INLINE struct i915_context * static INLINE struct i915_context *
i915_context( struct pipe_context *pipe ) i915_context( struct pipe_context *pipe )
{ {
return (struct i915_context *)pipe; return (struct i915_context *)pipe;
} }
#endif #endif

File diff suppressed because it is too large Load Diff

View File

@ -1,469 +1,469 @@
/************************************************************************** /**************************************************************************
* *
* Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved. * All Rights Reserved.
* *
* Permission is hereby granted, free of charge, to any person obtaining a * Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the * copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including * "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, * without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to * 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 * permit persons to whom the Software is furnished to do so, subject to
* the following conditions: * the following conditions:
* *
* The above copyright notice and this permission notice (including the * The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions * next paragraph) shall be included in all copies or substantial portions
* of the Software. * of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* *
**************************************************************************/ **************************************************************************/
/* Authors: Zack Rusin <zack@tungstengraphics.com> /* Authors: Zack Rusin <zack@tungstengraphics.com>
* Keith Whitwell <keith@tungstengraphics.com> * Keith Whitwell <keith@tungstengraphics.com>
*/ */
#include "pipe/p_winsys.h" #include "pipe/p_winsys.h"
#include "pipe/p_util.h" #include "pipe/p_util.h"
#include "pipe/p_inlines.h" #include "pipe/p_inlines.h"
#include "pipe/p_shader_tokens.h" #include "pipe/p_shader_tokens.h"
#include "tgsi/util/tgsi_dump.h" #include "tgsi/util/tgsi_dump.h"
#include "tgsi/util/tgsi_parse.h" #include "tgsi/util/tgsi_parse.h"
#include "brw_context.h" #include "brw_context.h"
#include "brw_defines.h" #include "brw_defines.h"
#include "brw_state.h" #include "brw_state.h"
#include "brw_draw.h" #include "brw_draw.h"
#define DUP( TYPE, VAL ) \ #define DUP( TYPE, VAL ) \
do { \ do { \
struct TYPE *x = malloc(sizeof(*x)); \ struct TYPE *x = malloc(sizeof(*x)); \
memcpy(x, VAL, sizeof(*x) ); \ memcpy(x, VAL, sizeof(*x) ); \
return x; \ return x; \
} while (0) } while (0)
/************************************************************************ /************************************************************************
* Blend * Blend
*/ */
static void * static void *
brw_create_blend_state(struct pipe_context *pipe, brw_create_blend_state(struct pipe_context *pipe,
const struct pipe_blend_state *blend) const struct pipe_blend_state *blend)
{ {
DUP( pipe_blend_state, blend ); DUP( pipe_blend_state, blend );
} }
static void brw_bind_blend_state(struct pipe_context *pipe, static void brw_bind_blend_state(struct pipe_context *pipe,
void *blend) void *blend)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.Blend = (struct pipe_blend_state*)blend; brw->attribs.Blend = (struct pipe_blend_state*)blend;
brw->state.dirty.brw |= BRW_NEW_BLEND; brw->state.dirty.brw |= BRW_NEW_BLEND;
} }
static void brw_delete_blend_state(struct pipe_context *pipe, void *blend) static void brw_delete_blend_state(struct pipe_context *pipe, void *blend)
{ {
free(blend); free(blend);
} }
static void brw_set_blend_color( struct pipe_context *pipe, static void brw_set_blend_color( struct pipe_context *pipe,
const struct pipe_blend_color *blend_color ) const struct pipe_blend_color *blend_color )
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.BlendColor = *blend_color; brw->attribs.BlendColor = *blend_color;
brw->state.dirty.brw |= BRW_NEW_BLEND; brw->state.dirty.brw |= BRW_NEW_BLEND;
} }
/************************************************************************ /************************************************************************
* Sampler * Sampler
*/ */
static void * static void *
brw_create_sampler_state(struct pipe_context *pipe, brw_create_sampler_state(struct pipe_context *pipe,
const struct pipe_sampler_state *sampler) const struct pipe_sampler_state *sampler)
{ {
DUP( pipe_sampler_state, sampler ); DUP( pipe_sampler_state, sampler );
} }
static void brw_bind_sampler_states(struct pipe_context *pipe, static void brw_bind_sampler_states(struct pipe_context *pipe,
unsigned num, void **sampler) unsigned num, void **sampler)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
assert(num <= PIPE_MAX_SAMPLERS); assert(num <= PIPE_MAX_SAMPLERS);
/* Check for no-op */ /* Check for no-op */
if (num == brw->num_samplers && if (num == brw->num_samplers &&
!memcmp(brw->attribs.Samplers, sampler, num * sizeof(void *))) !memcmp(brw->attribs.Samplers, sampler, num * sizeof(void *)))
return; return;
memcpy(brw->attribs.Samplers, sampler, num * sizeof(void *)); memcpy(brw->attribs.Samplers, sampler, num * sizeof(void *));
memset(&brw->attribs.Samplers[num], 0, (PIPE_MAX_SAMPLERS - num) * memset(&brw->attribs.Samplers[num], 0, (PIPE_MAX_SAMPLERS - num) *
sizeof(void *)); sizeof(void *));
brw->num_samplers = num; brw->num_samplers = num;
brw->state.dirty.brw |= BRW_NEW_SAMPLER; brw->state.dirty.brw |= BRW_NEW_SAMPLER;
} }
static void brw_delete_sampler_state(struct pipe_context *pipe, static void brw_delete_sampler_state(struct pipe_context *pipe,
void *sampler) void *sampler)
{ {
free(sampler); free(sampler);
} }
/************************************************************************ /************************************************************************
* Depth stencil * Depth stencil
*/ */
static void * static void *
brw_create_depth_stencil_state(struct pipe_context *pipe, brw_create_depth_stencil_state(struct pipe_context *pipe,
const struct pipe_depth_stencil_alpha_state *depth_stencil) const struct pipe_depth_stencil_alpha_state *depth_stencil)
{ {
DUP( pipe_depth_stencil_alpha_state, depth_stencil ); DUP( pipe_depth_stencil_alpha_state, depth_stencil );
} }
static void brw_bind_depth_stencil_state(struct pipe_context *pipe, static void brw_bind_depth_stencil_state(struct pipe_context *pipe,
void *depth_stencil) void *depth_stencil)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.DepthStencil = (const struct pipe_depth_stencil_alpha_state *)depth_stencil; brw->attribs.DepthStencil = (const struct pipe_depth_stencil_alpha_state *)depth_stencil;
brw->state.dirty.brw |= BRW_NEW_DEPTH_STENCIL; brw->state.dirty.brw |= BRW_NEW_DEPTH_STENCIL;
} }
static void brw_delete_depth_stencil_state(struct pipe_context *pipe, static void brw_delete_depth_stencil_state(struct pipe_context *pipe,
void *depth_stencil) void *depth_stencil)
{ {
free(depth_stencil); free(depth_stencil);
} }
/************************************************************************ /************************************************************************
* Scissor * Scissor
*/ */
static void brw_set_scissor_state( struct pipe_context *pipe, static void brw_set_scissor_state( struct pipe_context *pipe,
const struct pipe_scissor_state *scissor ) const struct pipe_scissor_state *scissor )
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
memcpy( &brw->attribs.Scissor, scissor, sizeof(*scissor) ); memcpy( &brw->attribs.Scissor, scissor, sizeof(*scissor) );
brw->state.dirty.brw |= BRW_NEW_SCISSOR; brw->state.dirty.brw |= BRW_NEW_SCISSOR;
} }
/************************************************************************ /************************************************************************
* Stipple * Stipple
*/ */
static void brw_set_polygon_stipple( struct pipe_context *pipe, static void brw_set_polygon_stipple( struct pipe_context *pipe,
const struct pipe_poly_stipple *stipple ) const struct pipe_poly_stipple *stipple )
{ {
} }
/************************************************************************ /************************************************************************
* Fragment shader * Fragment shader
*/ */
static void * brw_create_fs_state(struct pipe_context *pipe, static void * brw_create_fs_state(struct pipe_context *pipe,
const struct pipe_shader_state *shader) const struct pipe_shader_state *shader)
{ {
struct brw_fragment_program *brw_fp = CALLOC_STRUCT(brw_fragment_program); struct brw_fragment_program *brw_fp = CALLOC_STRUCT(brw_fragment_program);
brw_fp->program.tokens = tgsi_dup_tokens(shader->tokens); brw_fp->program.tokens = tgsi_dup_tokens(shader->tokens);
brw_fp->id = brw_context(pipe)->program_id++; brw_fp->id = brw_context(pipe)->program_id++;
tgsi_scan_shader(shader->tokens, &brw_fp->info); tgsi_scan_shader(shader->tokens, &brw_fp->info);
#if 0 #if 0
brw_shader_info(shader->tokens, brw_shader_info(shader->tokens,
&brw_fp->info2); &brw_fp->info2);
#endif #endif
tgsi_dump(shader->tokens, 0); tgsi_dump(shader->tokens, 0);
return (void *)brw_fp; return (void *)brw_fp;
} }
static void brw_bind_fs_state(struct pipe_context *pipe, void *shader) static void brw_bind_fs_state(struct pipe_context *pipe, void *shader)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.FragmentProgram = (struct brw_fragment_program *)shader; brw->attribs.FragmentProgram = (struct brw_fragment_program *)shader;
brw->state.dirty.brw |= BRW_NEW_FS; brw->state.dirty.brw |= BRW_NEW_FS;
} }
static void brw_delete_fs_state(struct pipe_context *pipe, void *shader) static void brw_delete_fs_state(struct pipe_context *pipe, void *shader)
{ {
struct brw_fragment_program *brw_fp = (struct brw_fragment_program *) shader; struct brw_fragment_program *brw_fp = (struct brw_fragment_program *) shader;
FREE((void *) brw_fp->program.tokens); FREE((void *) brw_fp->program.tokens);
FREE(brw_fp); FREE(brw_fp);
} }
/************************************************************************ /************************************************************************
* Vertex shader and other TNL state * Vertex shader and other TNL state
*/ */
static void *brw_create_vs_state(struct pipe_context *pipe, static void *brw_create_vs_state(struct pipe_context *pipe,
const struct pipe_shader_state *shader) const struct pipe_shader_state *shader)
{ {
struct brw_vertex_program *brw_vp = CALLOC_STRUCT(brw_vertex_program); struct brw_vertex_program *brw_vp = CALLOC_STRUCT(brw_vertex_program);
brw_vp->program.tokens = tgsi_dup_tokens(shader->tokens); brw_vp->program.tokens = tgsi_dup_tokens(shader->tokens);
brw_vp->id = brw_context(pipe)->program_id++; brw_vp->id = brw_context(pipe)->program_id++;
tgsi_scan_shader(shader->tokens, &brw_vp->info); tgsi_scan_shader(shader->tokens, &brw_vp->info);
#if 0 #if 0
brw_shader_info(shader->tokens, brw_shader_info(shader->tokens,
&brw_vp->info2); &brw_vp->info2);
#endif #endif
tgsi_dump(shader->tokens, 0); tgsi_dump(shader->tokens, 0);
return (void *)brw_vp; return (void *)brw_vp;
} }
static void brw_bind_vs_state(struct pipe_context *pipe, void *vs) static void brw_bind_vs_state(struct pipe_context *pipe, void *vs)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.VertexProgram = (struct brw_vertex_program *)vs; brw->attribs.VertexProgram = (struct brw_vertex_program *)vs;
brw->state.dirty.brw |= BRW_NEW_VS; brw->state.dirty.brw |= BRW_NEW_VS;
debug_printf("YYYYYYYYYYYYY BINDING VERTEX SHADER\n"); debug_printf("YYYYYYYYYYYYY BINDING VERTEX SHADER\n");
} }
static void brw_delete_vs_state(struct pipe_context *pipe, void *shader) static void brw_delete_vs_state(struct pipe_context *pipe, void *shader)
{ {
struct brw_vertex_program *brw_vp = (struct brw_vertex_program *) shader; struct brw_vertex_program *brw_vp = (struct brw_vertex_program *) shader;
FREE((void *) brw_vp->program.tokens); FREE((void *) brw_vp->program.tokens);
FREE(brw_vp); FREE(brw_vp);
} }
static void brw_set_clip_state( struct pipe_context *pipe, static void brw_set_clip_state( struct pipe_context *pipe,
const struct pipe_clip_state *clip ) const struct pipe_clip_state *clip )
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.Clip = *clip; brw->attribs.Clip = *clip;
} }
static void brw_set_viewport_state( struct pipe_context *pipe, static void brw_set_viewport_state( struct pipe_context *pipe,
const struct pipe_viewport_state *viewport ) const struct pipe_viewport_state *viewport )
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.Viewport = *viewport; /* struct copy */ brw->attribs.Viewport = *viewport; /* struct copy */
brw->state.dirty.brw |= BRW_NEW_VIEWPORT; brw->state.dirty.brw |= BRW_NEW_VIEWPORT;
/* pass the viewport info to the draw module */ /* pass the viewport info to the draw module */
//draw_set_viewport_state(brw->draw, viewport); //draw_set_viewport_state(brw->draw, viewport);
} }
static void brw_set_vertex_buffers(struct pipe_context *pipe, static void brw_set_vertex_buffers(struct pipe_context *pipe,
unsigned count, unsigned count,
const struct pipe_vertex_buffer *buffers) const struct pipe_vertex_buffer *buffers)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
memcpy(brw->vb.vbo_array, buffers, count * sizeof(buffers[0])); memcpy(brw->vb.vbo_array, buffers, count * sizeof(buffers[0]));
} }
static void brw_set_vertex_elements(struct pipe_context *pipe, static void brw_set_vertex_elements(struct pipe_context *pipe,
unsigned count, unsigned count,
const struct pipe_vertex_element *elements) const struct pipe_vertex_element *elements)
{ {
/* flush ? */ /* flush ? */
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
uint i; uint i;
assert(count <= PIPE_MAX_ATTRIBS); assert(count <= PIPE_MAX_ATTRIBS);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
struct brw_vertex_element_state el; struct brw_vertex_element_state el;
memset(&el, 0, sizeof(el)); memset(&el, 0, sizeof(el));
el.ve0.src_offset = elements[i].src_offset; el.ve0.src_offset = elements[i].src_offset;
el.ve0.src_format = brw_translate_surface_format(elements[i].src_format); el.ve0.src_format = brw_translate_surface_format(elements[i].src_format);
el.ve0.valid = 1; el.ve0.valid = 1;
el.ve0.vertex_buffer_index = elements[i].vertex_buffer_index; el.ve0.vertex_buffer_index = elements[i].vertex_buffer_index;
el.ve1.dst_offset = i * 4; el.ve1.dst_offset = i * 4;
el.ve1.vfcomponent3 = BRW_VFCOMPONENT_STORE_SRC; el.ve1.vfcomponent3 = BRW_VFCOMPONENT_STORE_SRC;
el.ve1.vfcomponent2 = BRW_VFCOMPONENT_STORE_SRC; el.ve1.vfcomponent2 = BRW_VFCOMPONENT_STORE_SRC;
el.ve1.vfcomponent1 = BRW_VFCOMPONENT_STORE_SRC; el.ve1.vfcomponent1 = BRW_VFCOMPONENT_STORE_SRC;
el.ve1.vfcomponent0 = BRW_VFCOMPONENT_STORE_SRC; el.ve1.vfcomponent0 = BRW_VFCOMPONENT_STORE_SRC;
switch (elements[i].nr_components) { switch (elements[i].nr_components) {
case 1: el.ve1.vfcomponent1 = BRW_VFCOMPONENT_STORE_0; case 1: el.ve1.vfcomponent1 = BRW_VFCOMPONENT_STORE_0;
case 2: el.ve1.vfcomponent2 = BRW_VFCOMPONENT_STORE_0; case 2: el.ve1.vfcomponent2 = BRW_VFCOMPONENT_STORE_0;
case 3: el.ve1.vfcomponent3 = BRW_VFCOMPONENT_STORE_1_FLT; case 3: el.ve1.vfcomponent3 = BRW_VFCOMPONENT_STORE_1_FLT;
break; break;
} }
brw->vb.inputs[i] = el; brw->vb.inputs[i] = el;
} }
} }
/************************************************************************ /************************************************************************
* Constant buffers * Constant buffers
*/ */
static void brw_set_constant_buffer(struct pipe_context *pipe, static void brw_set_constant_buffer(struct pipe_context *pipe,
uint shader, uint index, uint shader, uint index,
const struct pipe_constant_buffer *buf) const struct pipe_constant_buffer *buf)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
assert(buf == 0 || index == 0); assert(buf == 0 || index == 0);
brw->attribs.Constants[shader] = buf; brw->attribs.Constants[shader] = buf;
brw->state.dirty.brw |= BRW_NEW_CONSTANTS; brw->state.dirty.brw |= BRW_NEW_CONSTANTS;
} }
/************************************************************************ /************************************************************************
* Texture surfaces * Texture surfaces
*/ */
static void brw_set_sampler_textures(struct pipe_context *pipe, static void brw_set_sampler_textures(struct pipe_context *pipe,
unsigned num, unsigned num,
struct pipe_texture **texture) struct pipe_texture **texture)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
uint i; uint i;
assert(num <= PIPE_MAX_SAMPLERS); assert(num <= PIPE_MAX_SAMPLERS);
/* Check for no-op */ /* Check for no-op */
if (num == brw->num_textures && if (num == brw->num_textures &&
!memcmp(brw->attribs.Texture, texture, num * !memcmp(brw->attribs.Texture, texture, num *
sizeof(struct pipe_texture *))) sizeof(struct pipe_texture *)))
return; return;
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
pipe_texture_reference((struct pipe_texture **) &brw->attribs.Texture[i], pipe_texture_reference((struct pipe_texture **) &brw->attribs.Texture[i],
texture[i]); texture[i]);
for (i = num; i < brw->num_textures; i++) for (i = num; i < brw->num_textures; i++)
pipe_texture_reference((struct pipe_texture **) &brw->attribs.Texture[i], pipe_texture_reference((struct pipe_texture **) &brw->attribs.Texture[i],
NULL); NULL);
brw->num_textures = num; brw->num_textures = num;
brw->state.dirty.brw |= BRW_NEW_TEXTURE; brw->state.dirty.brw |= BRW_NEW_TEXTURE;
} }
/************************************************************************ /************************************************************************
* Render targets, etc * Render targets, etc
*/ */
static void brw_set_framebuffer_state(struct pipe_context *pipe, static void brw_set_framebuffer_state(struct pipe_context *pipe,
const struct pipe_framebuffer_state *fb) const struct pipe_framebuffer_state *fb)
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.FrameBuffer = *fb; /* struct copy */ brw->attribs.FrameBuffer = *fb; /* struct copy */
brw->state.dirty.brw |= BRW_NEW_FRAMEBUFFER; brw->state.dirty.brw |= BRW_NEW_FRAMEBUFFER;
} }
/************************************************************************ /************************************************************************
* Rasterizer state * Rasterizer state
*/ */
static void * static void *
brw_create_rasterizer_state(struct pipe_context *pipe, brw_create_rasterizer_state(struct pipe_context *pipe,
const struct pipe_rasterizer_state *rasterizer) const struct pipe_rasterizer_state *rasterizer)
{ {
DUP(pipe_rasterizer_state, rasterizer); DUP(pipe_rasterizer_state, rasterizer);
} }
static void brw_bind_rasterizer_state( struct pipe_context *pipe, static void brw_bind_rasterizer_state( struct pipe_context *pipe,
void *setup ) void *setup )
{ {
struct brw_context *brw = brw_context(pipe); struct brw_context *brw = brw_context(pipe);
brw->attribs.Raster = (struct pipe_rasterizer_state *)setup; brw->attribs.Raster = (struct pipe_rasterizer_state *)setup;
/* Also pass-through to draw module: /* Also pass-through to draw module:
*/ */
//draw_set_rasterizer_state(brw->draw, setup); //draw_set_rasterizer_state(brw->draw, setup);
brw->state.dirty.brw |= BRW_NEW_RASTERIZER; brw->state.dirty.brw |= BRW_NEW_RASTERIZER;
} }
static void brw_delete_rasterizer_state(struct pipe_context *pipe, static void brw_delete_rasterizer_state(struct pipe_context *pipe,
void *setup) void *setup)
{ {
free(setup); free(setup);
} }
void void
brw_init_state_functions( struct brw_context *brw ) brw_init_state_functions( struct brw_context *brw )
{ {
brw->pipe.create_blend_state = brw_create_blend_state; brw->pipe.create_blend_state = brw_create_blend_state;
brw->pipe.bind_blend_state = brw_bind_blend_state; brw->pipe.bind_blend_state = brw_bind_blend_state;
brw->pipe.delete_blend_state = brw_delete_blend_state; brw->pipe.delete_blend_state = brw_delete_blend_state;
brw->pipe.create_sampler_state = brw_create_sampler_state; brw->pipe.create_sampler_state = brw_create_sampler_state;
brw->pipe.bind_sampler_states = brw_bind_sampler_states; brw->pipe.bind_sampler_states = brw_bind_sampler_states;
brw->pipe.delete_sampler_state = brw_delete_sampler_state; brw->pipe.delete_sampler_state = brw_delete_sampler_state;
brw->pipe.create_depth_stencil_alpha_state = brw_create_depth_stencil_state; brw->pipe.create_depth_stencil_alpha_state = brw_create_depth_stencil_state;
brw->pipe.bind_depth_stencil_alpha_state = brw_bind_depth_stencil_state; brw->pipe.bind_depth_stencil_alpha_state = brw_bind_depth_stencil_state;
brw->pipe.delete_depth_stencil_alpha_state = brw_delete_depth_stencil_state; brw->pipe.delete_depth_stencil_alpha_state = brw_delete_depth_stencil_state;
brw->pipe.create_rasterizer_state = brw_create_rasterizer_state; brw->pipe.create_rasterizer_state = brw_create_rasterizer_state;
brw->pipe.bind_rasterizer_state = brw_bind_rasterizer_state; brw->pipe.bind_rasterizer_state = brw_bind_rasterizer_state;
brw->pipe.delete_rasterizer_state = brw_delete_rasterizer_state; brw->pipe.delete_rasterizer_state = brw_delete_rasterizer_state;
brw->pipe.create_fs_state = brw_create_fs_state; brw->pipe.create_fs_state = brw_create_fs_state;
brw->pipe.bind_fs_state = brw_bind_fs_state; brw->pipe.bind_fs_state = brw_bind_fs_state;
brw->pipe.delete_fs_state = brw_delete_fs_state; brw->pipe.delete_fs_state = brw_delete_fs_state;
brw->pipe.create_vs_state = brw_create_vs_state; brw->pipe.create_vs_state = brw_create_vs_state;
brw->pipe.bind_vs_state = brw_bind_vs_state; brw->pipe.bind_vs_state = brw_bind_vs_state;
brw->pipe.delete_vs_state = brw_delete_vs_state; brw->pipe.delete_vs_state = brw_delete_vs_state;
brw->pipe.set_blend_color = brw_set_blend_color; brw->pipe.set_blend_color = brw_set_blend_color;
brw->pipe.set_clip_state = brw_set_clip_state; brw->pipe.set_clip_state = brw_set_clip_state;
brw->pipe.set_constant_buffer = brw_set_constant_buffer; brw->pipe.set_constant_buffer = brw_set_constant_buffer;
brw->pipe.set_framebuffer_state = brw_set_framebuffer_state; brw->pipe.set_framebuffer_state = brw_set_framebuffer_state;
// brw->pipe.set_feedback_state = brw_set_feedback_state; // brw->pipe.set_feedback_state = brw_set_feedback_state;
// brw->pipe.set_feedback_buffer = brw_set_feedback_buffer; // brw->pipe.set_feedback_buffer = brw_set_feedback_buffer;
brw->pipe.set_polygon_stipple = brw_set_polygon_stipple; brw->pipe.set_polygon_stipple = brw_set_polygon_stipple;
brw->pipe.set_scissor_state = brw_set_scissor_state; brw->pipe.set_scissor_state = brw_set_scissor_state;
brw->pipe.set_sampler_textures = brw_set_sampler_textures; brw->pipe.set_sampler_textures = brw_set_sampler_textures;
brw->pipe.set_viewport_state = brw_set_viewport_state; brw->pipe.set_viewport_state = brw_set_viewport_state;
brw->pipe.set_vertex_buffers = brw_set_vertex_buffers; brw->pipe.set_vertex_buffers = brw_set_vertex_buffers;
brw->pipe.set_vertex_elements = brw_set_vertex_elements; brw->pipe.set_vertex_elements = brw_set_vertex_elements;
} }