i965g: wip on removing GL stuff, trying to get a few files compiling

This commit is contained in:
Keith Whitwell 2009-10-23 23:27:43 +01:00
parent 6b48fb0022
commit 22906f7301
50 changed files with 419 additions and 1019 deletions

View file

@ -1,38 +1,9 @@
TOP = ../../../../..
TOP = ../../../..
include $(TOP)/configs/current
LIBNAME = i965_dri.so
LIBNAME = i965
DRIVER_SOURCES = \
intel_batchbuffer.c \
intel_blit.c \
intel_buffer_objects.c \
intel_buffers.c \
intel_clear.c \
intel_context.c \
intel_decode.c \
intel_extensions.c \
intel_fbo.c \
intel_mipmap_tree.c \
intel_regions.c \
intel_screen.c \
intel_span.c \
intel_pixel.c \
intel_pixel_bitmap.c \
intel_pixel_copy.c \
intel_pixel_draw.c \
intel_pixel_read.c \
intel_state.c \
intel_swapbuffers.c \
intel_syncobj.c \
intel_tex.c \
intel_tex_copy.c \
intel_tex_format.c \
intel_tex_image.c \
intel_tex_layout.c \
intel_tex_subimage.c \
intel_tex_validate.c \
C_SOURCES = \
brw_cc.c \
brw_clip.c \
brw_clip_line.c \
@ -50,13 +21,18 @@ DRIVER_SOURCES = \
brw_eu_debug.c \
brw_eu_emit.c \
brw_eu_util.c \
brw_fallback.c \
brw_gs.c \
brw_gs_emit.c \
brw_gs_state.c \
brw_misc_state.c \
brw_program.c \
brw_queryobj.c \
brw_pipe_blend.c \
brw_pipe_debug.c \
brw_pipe_depth.c \
brw_pipe_fb.c \
brw_pipe_flush.c \
brw_pipe_query.c \
brw_pipe_shader.c \
brw_screen_surface.c \
brw_sf.c \
brw_sf_emit.c \
brw_sf_state.c \
@ -64,41 +40,30 @@ DRIVER_SOURCES = \
brw_state_cache.c \
brw_state_dump.c \
brw_state_upload.c \
brw_swtnl.c \
brw_tex.c \
brw_tex_layout.c \
brw_urb.c \
brw_util.c \
brw_vs.c \
brw_vs_constval.c \
brw_vs_emit.c \
brw_vs_state.c \
brw_vs_surface_state.c \
brw_vtbl.c \
brw_wm.c \
brw_wm_debug.c \
brw_wm_emit.c \
brw_wm_fp.c \
brw_wm_iz.c \
brw_wm_glsl.c \
brw_wm_iz.c \
brw_wm_pass0.c \
brw_wm_pass1.c \
brw_wm_pass2.c \
brw_wm_sampler_state.c \
brw_wm_state.c \
brw_wm_surface_state.c
brw_wm_surface_state.c \
brw_bo.c \
intel_batchbuffer.c \
intel_tex_format.c \
intel_tex_layout.c
C_SOURCES = \
$(COMMON_SOURCES) \
$(MINIGLX_SOURCES) \
$(DRIVER_SOURCES)
ASM_SOURCES =
DRIVER_DEFINES = -I../intel -I../intel/server
DRI_LIB_DEPS += -ldrm_intel
include ../Makefile.template
intel_decode.o: ../intel/intel_decode.c
intel_tex_layout.o: ../intel/intel_tex_layout.c
include ../../Makefile.template

View file

@ -33,13 +33,9 @@
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
#include "brw_util.h"
#include "main/macros.h"
#include "main/enums.h"
static void prepare_cc_vp( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_cc_viewport ccv;
memset(&ccv, 0, sizeof(ccv));
@ -48,13 +44,13 @@ static void prepare_cc_vp( struct brw_context *brw )
ccv.min_depth = ctx->Viewport.Near;
ccv.max_depth = ctx->Viewport.Far;
dri_bo_unreference(brw->cc.vp_bo);
brw->sws->bo_unreference(brw->cc.vp_bo);
brw->cc.vp_bo = brw_cache_data( &brw->cache, BRW_CC_VP, &ccv, NULL, 0 );
}
const struct brw_tracked_state brw_cc_vp = {
.dirty = {
.mesa = _NEW_VIEWPORT,
.mesa = PIPE_NEW_VIEWPORT,
.brw = BRW_NEW_CONTEXT,
.cache = 0
},
@ -71,8 +67,8 @@ cc_unit_populate_key(struct brw_context *brw, struct brw_cc_unit_key *key)
{
memset(key, 0, sizeof(*key));
key->dsa = brw->curr.dsa.base;
key->blend = brw->curr.blend.base;
key->dsa = brw->dsa;
key->blend = brw->blend;
/* Clear non-respected values:
*/
@ -82,11 +78,11 @@ cc_unit_populate_key(struct brw_context *brw, struct brw_cc_unit_key *key)
/**
* Creates the state cache entry for the given CC unit key.
*/
static dri_bo *
static struct brw_winsys_buffer *
cc_unit_create_from_key(struct brw_context *brw, struct brw_cc_unit_key *key)
{
struct brw_cc_unit_state cc;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&cc, 0, sizeof(cc));
@ -124,7 +120,7 @@ static void prepare_cc_unit( struct brw_context *brw )
cc_unit_populate_key(brw, &key);
dri_bo_unreference(brw->cc.state_bo);
brw->sws->bo_unreference(brw->cc.state_bo);
brw->cc.state_bo = brw_search_cache(&brw->cache, BRW_CC_UNIT,
&key, sizeof(key),
&brw->cc.vp_bo, 1,

View file

@ -129,7 +129,7 @@ static void compile_clip_prog( struct brw_context *brw,
/* Upload
*/
dri_bo_unreference(brw->clip.prog_bo);
brw->sws->bo_unreference(brw->clip.prog_bo);
brw->clip.prog_bo = brw_upload_cache( &brw->cache,
BRW_CLIP_PROG,
&c.key, sizeof(c.key),
@ -199,7 +199,7 @@ static void upload_clip_prog(struct brw_context *brw)
}
}
dri_bo_unreference(brw->clip.prog_bo);
brw->sws->bo_unreference(brw->clip.prog_bo);
brw->clip.prog_bo = brw_search_cache(&brw->cache, BRW_CLIP_PROG,
&key, sizeof(key),
NULL, 0,

View file

@ -49,7 +49,6 @@ struct brw_clip_unit_key {
static void
clip_unit_populate_key(struct brw_context *brw, struct brw_clip_unit_key *key)
{
GLcontext *ctx = &brw->intel.ctx;
memset(key, 0, sizeof(*key));
/* CACHE_NEW_CLIP_PROG */
@ -69,12 +68,12 @@ clip_unit_populate_key(struct brw_context *brw, struct brw_clip_unit_key *key)
key->depth_clamp = 0; // XXX: add this to gallium: ctx->Transform.DepthClamp;
}
static dri_bo *
static struct brw_winsys_buffer *
clip_unit_create_from_key(struct brw_context *brw,
struct brw_clip_unit_key *key)
{
struct brw_clip_unit_state clip;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&clip, 0, sizeof(clip));
@ -162,7 +161,7 @@ static void upload_clip_unit( struct brw_context *brw )
clip_unit_populate_key(brw, &key);
dri_bo_unreference(brw->clip.state_bo);
brw->sws->bo_unreference(brw->clip.state_bo);
brw->clip.state_bo = brw_search_cache(&brw->cache, BRW_CLIP_UNIT,
&key, sizeof(key),
&brw->clip.prog_bo, 1,

View file

@ -30,32 +30,21 @@
*/
#include "main/imports.h"
#include "main/api_noop.h"
#include "main/macros.h"
#include "main/vtxfmt.h"
#include "main/simple_list.h"
#include "shader/shader_api.h"
#include "pipe/p_context.h"
#include "brw_context.h"
#include "brw_defines.h"
#include "brw_draw.h"
#include "brw_state.h"
#include "brw_vs.h"
#include "intel_tex.h"
#include "intel_blit.h"
#include "brw_screen_tex.h"
#include "intel_batchbuffer.h"
#include "intel_pixel.h"
#include "intel_span.h"
#include "tnl/t_pipeline.h"
#include "utils.h"
GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate)
struct pipe_context *brw_create_context( struct pipe_screen *screen,
void *priv )
{
struct brw_context *brw = (struct brw_context *) CALLOC_STRUCT(brw_context);
@ -87,9 +76,8 @@ GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
/**
* called from intelDestroyContext()
*/
static void brw_destroy_context( struct intel_context *intel )
static void brw_destroy_context( struct brw_context *brw )
{
struct brw_context *brw = brw_context(&intel->ctx);
int i;
brw_destroy_state(brw);
@ -102,27 +90,27 @@ static void brw_destroy_context( struct intel_context *intel )
brw->state.nr_color_regions = 0;
intel_region_release(&brw->state.depth_region);
dri_bo_unreference(brw->curbe.curbe_bo);
dri_bo_unreference(brw->vs.prog_bo);
dri_bo_unreference(brw->vs.state_bo);
dri_bo_unreference(brw->vs.bind_bo);
dri_bo_unreference(brw->gs.prog_bo);
dri_bo_unreference(brw->gs.state_bo);
dri_bo_unreference(brw->clip.prog_bo);
dri_bo_unreference(brw->clip.state_bo);
dri_bo_unreference(brw->clip.vp_bo);
dri_bo_unreference(brw->sf.prog_bo);
dri_bo_unreference(brw->sf.state_bo);
dri_bo_unreference(brw->sf.vp_bo);
brw->sws->bo_unreference(brw->curbe.curbe_bo);
brw->sws->bo_unreference(brw->vs.prog_bo);
brw->sws->bo_unreference(brw->vs.state_bo);
brw->sws->bo_unreference(brw->vs.bind_bo);
brw->sws->bo_unreference(brw->gs.prog_bo);
brw->sws->bo_unreference(brw->gs.state_bo);
brw->sws->bo_unreference(brw->clip.prog_bo);
brw->sws->bo_unreference(brw->clip.state_bo);
brw->sws->bo_unreference(brw->clip.vp_bo);
brw->sws->bo_unreference(brw->sf.prog_bo);
brw->sws->bo_unreference(brw->sf.state_bo);
brw->sws->bo_unreference(brw->sf.vp_bo);
for (i = 0; i < BRW_MAX_TEX_UNIT; i++)
dri_bo_unreference(brw->wm.sdc_bo[i]);
dri_bo_unreference(brw->wm.bind_bo);
brw->sws->bo_unreference(brw->wm.sdc_bo[i]);
brw->sws->bo_unreference(brw->wm.bind_bo);
for (i = 0; i < BRW_WM_MAX_SURF; i++)
dri_bo_unreference(brw->wm.surf_bo[i]);
dri_bo_unreference(brw->wm.sampler_bo);
dri_bo_unreference(brw->wm.prog_bo);
dri_bo_unreference(brw->wm.state_bo);
dri_bo_unreference(brw->cc.prog_bo);
dri_bo_unreference(brw->cc.state_bo);
dri_bo_unreference(brw->cc.vp_bo);
brw->sws->bo_unreference(brw->wm.surf_bo[i]);
brw->sws->bo_unreference(brw->wm.sampler_bo);
brw->sws->bo_unreference(brw->wm.prog_bo);
brw->sws->bo_unreference(brw->wm.state_bo);
brw->sws->bo_unreference(brw->cc.prog_bo);
brw->sws->bo_unreference(brw->cc.state_bo);
brw->sws->bo_unreference(brw->cc.vp_bo);
}

View file

@ -33,9 +33,9 @@
#ifndef BRWCONTEXT_INC
#define BRWCONTEXT_INC
#include "intel_context.h"
#include "brw_structs.h"
#include "main/imports.h"
#include "brw_winsys.h"
#include "pipe/p_state.h"
/* Glossary:
@ -119,6 +119,19 @@
struct brw_context;
#define PIPE_NEW_DEPTH_STENCIL_ALPHA 0x1
#define PIPE_NEW_RAST 0x2
#define PIPE_NEW_BLEND 0x2
#define PIPE_NEW_VIEWPORT 0x2
#define PIPE_NEW_FRAMEBUFFER 0x2
#define PIPE_NEW_VERTEX_BUFFER 0x2
#define PIPE_NEW_VERTEX_ELEMENT 0x2
#define PIPE_NEW_FRAGMENT_SHADER 0x2
#define PIPE_NEW_VERTEX_SHADER 0x2
#define PIPE_NEW_FRAGMENT_CONSTS 0x2
#define PIPE_NEW_VERTEX_CONSTS 0x2
#define BRW_NEW_URB_FENCE 0x1
#define BRW_NEW_FRAGMENT_PROGRAM 0x2
#define BRW_NEW_VERTEX_PROGRAM 0x4
@ -156,26 +169,23 @@ struct brw_state_flags {
};
/** Subclass of Mesa vertex program */
struct brw_vertex_program {
struct gl_vertex_program program;
const struct tgsi_token *tokens;
GLuint id;
dri_bo *const_buffer; /** Program constant buffer/surface */
struct brw_winsys_buffer *const_buffer; /** Program constant buffer/surface */
GLboolean use_const_buffer;
};
/** Subclass of Mesa fragment program */
struct brw_fragment_program {
struct gl_fragment_program program;
const struct tgsi_token *tokens;
GLuint id; /**< serial no. to identify frag progs, never re-used */
GLboolean isGLSL; /**< really, any IF/LOOP/CONT/BREAK instructions */
GLboolean isGLSL; /**< any IF/LOOP/CONT/BREAK instructions */
dri_bo *const_buffer; /** Program constant buffer/surface */
struct brw_winsys_buffer *const_buffer; /** Program constant buffer/surface */
GLboolean use_const_buffer;
/** for debugging, which texture units are referenced */
GLbitfield tex_units_used;
};
@ -244,7 +254,7 @@ struct brw_vs_prog_data {
/* Size == 0 if output either not written, or always [0,0,0,1]
*/
struct brw_vs_ouput_sizes {
GLubyte output_size[VERT_RESULT_MAX];
GLubyte output_size[PIPE_MAX_SHADER_OUTPUTS];
};
@ -312,10 +322,10 @@ struct brw_cache_item {
GLuint hash;
GLuint key_size; /* for variable-sized keys */
const void *key;
dri_bo **reloc_bufs;
struct brw_winsys_buffer **reloc_bufs;
GLuint nr_reloc_bufs;
dri_bo *bo;
struct brw_winsys_buffer *bo;
GLuint data_size;
struct brw_cache_item *next;
@ -336,7 +346,7 @@ struct brw_cache {
/* Record of the last BOs chosen for each cache_id. Used to set
* brw->state.dirty.cache when a new cache item is chosen.
*/
dri_bo *last_bo[BRW_MAX_CACHE];
struct brw_winsys_buffer *last_bo[BRW_MAX_CACHE];
};
@ -384,56 +394,22 @@ struct brw_cached_batch_item {
/* Protect against a future where VERT_ATTRIB_MAX > 32. Wouldn't life
* be easier if C allowed arrays of packed elements?
*/
#define ATTRIB_BIT_DWORDS ((VERT_ATTRIB_MAX+31)/32)
#define VS_INPUT_BITMASK_DWORDS ((PIPE_MAX_SHADER_INPUTS+31)/32)
struct brw_vertex_element {
const struct gl_client_array *glarray;
/** The corresponding Mesa vertex attribute */
gl_vert_attrib attrib;
/** Size of a complete element */
GLuint element_size;
/** Number of uploaded elements for this input. */
GLuint count;
/** Byte stride between elements in the uploaded array */
GLuint stride;
/** Offset of the first element within the buffer object */
unsigned int offset;
/** Buffer object containing the uploaded vertex data */
dri_bo *bo;
};
struct brw_vertex_info {
GLuint sizes[ATTRIB_BIT_DWORDS * 2]; /* sizes:2[VERT_ATTRIB_MAX] */
GLuint sizes[VS_INPUT_BITMASK_DWORDS * 2]; /* sizes:2[VERT_ATTRIB_MAX] */
};
/* Cache for TNL programs.
*/
struct brw_tnl_cache_item {
GLuint hash;
void *key;
void *data;
struct brw_tnl_cache_item *next;
};
struct brw_tnl_cache {
struct brw_tnl_cache_item **items;
GLuint size, n_items;
};
struct brw_query_object {
struct gl_query_object Base;
/** Doubly linked list of active query objects in the context. */
struct brw_query_object *prev, *next;
/** Last query BO associated with this query. */
dri_bo *bo;
struct brw_winsys_buffer *bo;
/** First index in bo with query data for this object. */
int first_index;
/** Last index in bo with query data for this object. */
@ -445,22 +421,29 @@ struct brw_query_object {
/**
* brw_context is derived from intel_context.
* brw_context is derived from pipe_context
*/
struct brw_context
{
struct pipe_context *pipe;
struct pipe_screen *screen;
struct brw_winsys_screen *sws;
GLuint primitive;
GLboolean emit_state_always;
GLboolean no_batch_wrap;
/* Active vertex program:
*/
const struct gl_vertex_program *vertex_program;
const struct gl_fragment_program *fragment_program;
struct pipe_framebuffer_state fb;
struct {
struct brw_state_flags dirty;
GLuint nr_color_regions;
struct intel_region *color_regions[MAX_DRAW_BUFFERS];
struct intel_region *depth_region;
/**
* List of buffers accumulated in brw_validate_state to receive
* dri_bo_check_aperture treatment before exec, so we can know if we
@ -471,7 +454,7 @@ struct brw_context
* consisting of the vertex buffers, pipelined state pointers,
* the CURBE, the depth buffer, and a query BO.
*/
dri_bo *validated_bos[VERT_ATTRIB_MAX + 16];
struct brw_winsys_buffer *validated_bos[PIPE_MAX_SHADER_INPUTS + 16];
int validated_bo_count;
} state;
@ -480,18 +463,14 @@ struct brw_context
struct brw_cached_batch_item *cached_batch_items;
struct {
struct brw_vertex_element inputs[VERT_ATTRIB_MAX];
struct pipe_vertex_element vertex_element[PIPE_MAX_ATTRIBS];
struct pipe_vertex_buffer vertex_buffer[PIPE_MAX_ATTRIBS];
unsigned num_vertex_element;
unsigned num_vertex_buffer;
struct brw_vertex_element *enabled[VERT_ATTRIB_MAX];
GLuint nr_enabled;
#define BRW_NR_UPLOAD_BUFS 17
#define BRW_UPLOAD_INIT_SIZE (128*1024)
struct {
dri_bo *bo;
GLuint offset;
} upload;
struct u_upload_mgr *upload_vertex;
struct u_upload_mgr *upload_index;
/* Summary of size and varying of active arrays, so we can check
* for changes to this state:
@ -509,7 +488,7 @@ struct brw_context
const struct _mesa_index_buffer *ib;
/* Updates to these fields are signaled by BRW_NEW_INDEX_BUFFER. */
dri_bo *bo;
struct brw_winsys_buffer *bo;
unsigned int offset;
unsigned int size;
/* Offset to index buffer index to use in CMD_3D_PRIM so that we can
@ -519,16 +498,6 @@ struct brw_context
unsigned int start_vertex_offset;
} ib;
/* Active vertex program:
*/
const struct gl_vertex_program *vertex_program;
const struct gl_fragment_program *fragment_program;
/* For populating the gtt:
*/
GLuint next_free_page;
/* BRW_NEW_URB_ALLOCATIONS:
*/
@ -545,12 +514,6 @@ struct brw_context
GLuint nr_sf_entries;
GLuint nr_cs_entries;
/* GLuint vs_size; */
/* GLuint gs_size; */
/* GLuint clip_size; */
/* GLuint sf_size; */
/* GLuint cs_size; */
GLuint vs_start;
GLuint gs_start;
GLuint clip_start;
@ -570,7 +533,7 @@ struct brw_context
GLuint vs_size;
GLuint total_size;
dri_bo *curbe_bo;
struct brw_winsys_buffer *curbe_bo;
/** Offset within curbe_bo of space for current curbe entry */
GLuint curbe_offset;
/** Offset within curbe_bo of space for next curbe entry */
@ -588,12 +551,12 @@ struct brw_context
struct {
struct brw_vs_prog_data *prog_data;
dri_bo *prog_bo;
dri_bo *state_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
/** Binding table of pointers to surf_bo entries */
dri_bo *bind_bo;
dri_bo *surf_bo[BRW_VS_MAX_SURF];
struct brw_winsys_buffer *bind_bo;
struct brw_winsys_buffer *surf_bo[BRW_VS_MAX_SURF];
GLuint nr_surfaces;
} vs;
@ -601,25 +564,25 @@ struct brw_context
struct brw_gs_prog_data *prog_data;
GLboolean prog_active;
dri_bo *prog_bo;
dri_bo *state_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
} gs;
struct {
struct brw_clip_prog_data *prog_data;
dri_bo *prog_bo;
dri_bo *state_bo;
dri_bo *vp_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
struct brw_winsys_buffer *vp_bo;
} clip;
struct {
struct brw_sf_prog_data *prog_data;
dri_bo *prog_bo;
dri_bo *state_bo;
dri_bo *vp_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
struct brw_winsys_buffer *vp_bo;
} sf;
struct {
@ -629,38 +592,38 @@ struct brw_context
/** Input sizes, calculated from active vertex program.
* One bit per fragment program input attribute.
*/
GLbitfield input_size_masks[4];
//GLbitfield input_size_masks[4];
/** Array of surface default colors (texture border color) */
dri_bo *sdc_bo[BRW_MAX_TEX_UNIT];
struct brw_winsys_buffer *sdc_bo[BRW_MAX_TEX_UNIT];
GLuint render_surf;
GLuint nr_surfaces;
GLuint max_threads;
dri_bo *scratch_bo;
struct brw_winsys_buffer *scratch_bo;
GLuint sampler_count;
dri_bo *sampler_bo;
struct brw_winsys_buffer *sampler_bo;
/** Binding table of pointers to surf_bo entries */
dri_bo *bind_bo;
dri_bo *surf_bo[BRW_WM_MAX_SURF];
struct brw_winsys_buffer *bind_bo;
struct brw_winsys_buffer *surf_bo[PIPE_MAX_COLOR_BUFS];
dri_bo *prog_bo;
dri_bo *state_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
} wm;
struct {
dri_bo *prog_bo;
dri_bo *state_bo;
dri_bo *vp_bo;
struct brw_winsys_buffer *prog_bo;
struct brw_winsys_buffer *state_bo;
struct brw_winsys_buffer *vp_bo;
} cc;
struct {
struct brw_query_object active_head;
dri_bo *bo;
struct brw_winsys_buffer *bo;
int index;
GLboolean active;
} query;
@ -679,12 +642,6 @@ struct brw_context
*/
void brwInitVtbl( struct brw_context *brw );
/*======================================================================
* brw_context.c
*/
GLboolean brwCreateContext( const __GLcontextModes *mesaVis,
__DRIcontextPrivate *driContextPriv,
void *sharedContextPrivate);
/*======================================================================
* brw_queryobj.c
@ -697,7 +654,7 @@ void brw_emit_query_end(struct brw_context *brw);
/*======================================================================
* brw_state_dump.c
*/
void brw_debug_batch(struct intel_context *intel);
void brw_debug_batch(struct brw_context *intel);
/*======================================================================
* brw_tex.c
@ -706,9 +663,9 @@ void brw_validate_textures( struct brw_context *brw );
/*======================================================================
* brw_program.c
* brw_pipe_shader.c
*/
void brwInitFragProgFuncs( struct dd_function_table *functions );
void brw_init_shader_funcs( struct brw_context *brw );
/* brw_urb.c

View file

@ -47,7 +47,6 @@
*/
static void calculate_curbe_offsets( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
/* CACHE_NEW_WM_PROG */
const GLuint nr_fp_regs = (brw->wm.prog_data->nr_params + 15) / 16;
@ -157,7 +156,6 @@ static GLfloat fixed_plane[6][4] = {
*/
static void prepare_constant_buffer(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
const struct brw_vertex_program *vp =
brw_vertex_program_const(brw->vertex_program);
const struct brw_fragment_program *fp =
@ -269,7 +267,7 @@ static void prepare_constant_buffer(struct brw_context *brw)
(brw->curbe.need_new_bo ||
brw->curbe.curbe_next_offset + bufsz > brw->curbe.curbe_bo->size))
{
dri_bo_unreference(brw->curbe.curbe_bo);
brw->sws->bo_unreference(brw->curbe.curbe_bo);
brw->curbe.curbe_bo = NULL;
}
@ -310,7 +308,6 @@ static void prepare_constant_buffer(struct brw_context *brw)
static void emit_constant_buffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
GLuint sz = brw->curbe.total_size;
BEGIN_BATCH(2, IGNORE_CLIPRECTS);

View file

@ -26,15 +26,6 @@
**************************************************************************/
#include "main/glheader.h"
#include "main/context.h"
#include "main/state.h"
#include "main/enums.h"
#include "tnl/tnl.h"
#include "vbo/vbo_context.h"
#include "swrast/swrast.h"
#include "swrast_setup/swrast_setup.h"
#include "brw_draw.h"
#include "brw_defines.h"
#include "brw_context.h"
@ -67,7 +58,6 @@ static uint32_t prim_to_hw_prim[PIPE_PRIM_POLYGON+1] = {
*/
static GLuint brw_set_prim(struct brw_context *brw, GLenum prim)
{
GLcontext *ctx = &brw->intel.ctx;
if (INTEL_DEBUG & DEBUG_PRIMS)
_mesa_printf("PRIM: %s\n", _mesa_lookup_enum_by_nr(prim));
@ -110,7 +100,6 @@ static void brw_emit_prim(struct brw_context *brw,
uint32_t hw_prim)
{
struct brw_3d_primitive prim_packet;
struct intel_context *intel = &brw->intel;
if (INTEL_DEBUG & DEBUG_PRIMS)
_mesa_printf("PRIM: %s %d %d\n", _mesa_lookup_enum_by_nr(prim->mode),
@ -163,7 +152,7 @@ static void brw_merge_inputs( struct brw_context *brw,
GLuint i;
for (i = 0; i < VERT_ATTRIB_MAX; i++)
dri_bo_unreference(brw->vb.inputs[i].bo);
brw->sws->bo_unreference(brw->vb.inputs[i].bo);
memset(&brw->vb.inputs, 0, sizeof(brw->vb.inputs));
memset(&brw->vb.info, 0, sizeof(brw->vb.info));
@ -185,7 +174,7 @@ static void brw_merge_inputs( struct brw_context *brw,
/* May fail if out of video memory for texture or vbo upload, or on
* fallback conditions.
*/
static GLboolean brw_try_draw_prims( GLcontext *ctx,
static GLboolean brw_try_draw_prims( struct brw_context *brw,
const struct gl_client_array *arrays[],
const struct _mesa_prim *prim,
GLuint nr_prims,
@ -193,7 +182,6 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx,
GLuint min_index,
GLuint max_index )
{
struct intel_context *intel = intel_context(ctx);
struct brw_context *brw = brw_context(ctx);
GLboolean retval = GL_FALSE;
GLboolean warn = GL_FALSE;
@ -241,7 +229,7 @@ static GLboolean brw_try_draw_prims( GLcontext *ctx,
return 0;
}
void brw_draw_prims( GLcontext *ctx,
void brw_draw_prims( struct brw_context *brw,
const struct gl_client_array *arrays[],
const struct _mesa_prim *prim,
GLuint nr_prims,
@ -274,7 +262,6 @@ void brw_draw_prims( GLcontext *ctx,
void brw_draw_init( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct vbo_context *vbo = vbo_context(ctx);
/* Register our drawing function:
@ -287,15 +274,15 @@ void brw_draw_destroy( struct brw_context *brw )
int i;
if (brw->vb.upload.bo != NULL) {
dri_bo_unreference(brw->vb.upload.bo);
brw->sws->bo_unreference(brw->vb.upload.bo);
brw->vb.upload.bo = NULL;
}
for (i = 0; i < VERT_ATTRIB_MAX; i++) {
dri_bo_unreference(brw->vb.inputs[i].bo);
brw->sws->bo_unreference(brw->vb.inputs[i].bo);
brw->vb.inputs[i].bo = NULL;
}
dri_bo_unreference(brw->ib.bo);
brw->sws->bo_unreference(brw->ib.bo);
brw->ib.bo = NULL;
}

View file

@ -28,13 +28,12 @@
#ifndef BRW_DRAW_H
#define BRW_DRAW_H
#include "main/mtypes.h" /* for GLcontext... */
#include "vbo/vbo.h"
#include "brw_types.h"
struct brw_context;
void brw_draw_prims( GLcontext *ctx,
void brw_draw_prims( struct brw_context *brw,
const struct gl_client_array *arrays[],
const struct _mesa_prim *prims,
GLuint nr_prims,
@ -48,7 +47,7 @@ void brw_draw_destroy( struct brw_context *brw );
/* brw_draw_current.c
*/
void brw_init_current_values(GLcontext *ctx,
void brw_init_current_values(struct brw_context *brw,
struct gl_client_array *arrays);
#endif

View file

@ -191,8 +191,6 @@ static unsigned get_index_type(int type)
static boolean brw_prepare_vertices(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct intel_context *intel = intel_context(ctx);
GLbitfield vs_inputs = brw->vs.prog_data->inputs_read;
GLuint i;
const unsigned char *ptr = NULL;
@ -210,15 +208,17 @@ static boolean brw_prepare_vertices(struct brw_context *brw)
for (i = 0; i < brw->vb.nr_enabled; i++) {
struct brw_vertex_element *input = brw->vb.enabled[i];
for (i = 0; i < brw->vb.num_vertex_buffer; i++) {
struct brw_vertex_buffer *vb = brw->vb.vertex_buffer[i];
unsigned size = (vb->stride == 0 ?
vb->size :
vb->stride * (max_index + 1 - min_index));
input->element_size = get_size(input->glarray->Type) * input->glarray->Size;
if (brw_is_user_buffer(vb)) {
u_upload_buffer( brw->upload,
u_upload_buffer( brw->upload_vertex,
min_index * vb->stride,
(max_index + 1 - min_index) * vb->stride,
size,
&offset,
&buffer );
}
@ -226,20 +226,20 @@ static boolean brw_prepare_vertices(struct brw_context *brw)
{
offset = 0;
buffer = vb->buffer;
count = stride == 0 ? 1 : max_index + 1 - min_index;
}
/* Named buffer object: Just reference its contents directly. */
dri_bo_unreference(input->bo);
input->bo = intel_bufferobj_buffer(intel, intel_buffer,
INTEL_READ);
dri_bo_reference(input->bo);
/* Set up post-upload info about this vertex buffer:
*/
input->offset = (unsigned long)offset;
input->stride = vb->stride;
input->count = count;
brw->sws->bo_unreference(input->bo);
input->bo = intel_bufferobj_buffer(intel, intel_buffer,
INTEL_READ);
brw->sws->bo_reference(input->bo);
assert(input->offset < input->bo->size);
assert(input->offset + size <= input->bo->size);
}
brw_prepare_query_begin(brw);
@ -253,8 +253,6 @@ static boolean brw_prepare_vertices(struct brw_context *brw)
static void brw_emit_vertices(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct intel_context *intel = intel_context(ctx);
GLuint i;
brw_emit_query_begin(brw);
@ -370,11 +368,9 @@ const struct brw_tracked_state brw_vertices = {
static void brw_prepare_indices(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct intel_context *intel = &brw->intel;
const struct _mesa_index_buffer *index_buffer = brw->ib.ib;
GLuint ib_size;
dri_bo *bo = NULL;
struct brw_winsys_buffer *bo = NULL;
struct gl_buffer_object *bufferobj;
GLuint offset;
GLuint ib_type_size;
@ -421,7 +417,7 @@ static void brw_prepare_indices(struct brw_context *brw)
} else {
bo = intel_bufferobj_buffer(intel, intel_buffer_object(bufferobj),
INTEL_READ);
dri_bo_reference(bo);
brw->sws->bo_reference(bo);
/* Use CMD_3D_PRIM's start_vertex_offset to avoid re-uploading
* the index buffer state when we're just moving the start index
@ -461,7 +457,6 @@ const struct brw_tracked_state brw_indices = {
static void brw_emit_index_buffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
const struct _mesa_index_buffer *index_buffer = brw->ib.ib;
if (index_buffer == NULL)

View file

@ -30,8 +30,6 @@
*/
#include "main/mtypes.h"
#include "main/imports.h"
#include "brw_eu.h"
void brw_print_reg( struct brw_reg hwreg )

View file

@ -29,10 +29,6 @@
* Keith Whitwell <keith@tungstengraphics.com>
*/
#include "main/glheader.h"
#include "main/macros.h"
#include "main/enums.h"
#include "intel_batchbuffer.h"
#include "brw_defines.h"
@ -124,7 +120,7 @@ static void compile_gs_prog( struct brw_context *brw,
/* Upload
*/
dri_bo_unreference(brw->gs.prog_bo);
brw->sws->bo_unreference(brw->gs.prog_bo);
brw->gs.prog_bo = brw_upload_cache( &brw->cache, BRW_GS_PROG,
&c.key, sizeof(c.key),
NULL, 0,
@ -180,7 +176,7 @@ static void prepare_gs_prog(struct brw_context *brw)
}
if (brw->gs.prog_active) {
dri_bo_unreference(brw->gs.prog_bo);
brw->sws->bo_unreference(brw->gs.prog_bo);
brw->gs.prog_bo = brw_search_cache(&brw->cache, BRW_GS_PROG,
&key, sizeof(key),
NULL, 0,

View file

@ -30,11 +30,6 @@
*/
#include "main/glheader.h"
#include "main/macros.h"
#include "main/enums.h"
#include "shader/program.h"
#include "intel_batchbuffer.h"
#include "brw_defines.h"

View file

@ -34,7 +34,6 @@
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
#include "main/macros.h"
struct brw_gs_unit_key {
unsigned int total_grf;
@ -69,11 +68,11 @@ gs_unit_populate_key(struct brw_context *brw, struct brw_gs_unit_key *key)
key->urb_size = brw->urb.vsize;
}
static dri_bo *
static struct brw_winsys_buffer *
gs_unit_create_from_key(struct brw_context *brw, struct brw_gs_unit_key *key)
{
struct brw_gs_unit_state gs;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&gs, 0, sizeof(gs));
@ -128,7 +127,7 @@ static void prepare_gs_unit(struct brw_context *brw)
gs_unit_populate_key(brw, &key);
dri_bo_unreference(brw->gs.state_bo);
brw->sws->bo_unreference(brw->gs.state_bo);
brw->gs.state_bo = brw_search_cache(&brw->cache, BRW_GS_UNIT,
&key, sizeof(key),
&brw->gs.prog_bo, 1,

View file

@ -48,7 +48,6 @@
static void upload_blend_constant_color(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_blend_constant_color bcc;
memset(&bcc, 0, sizeof(bcc));
@ -75,17 +74,11 @@ const struct brw_tracked_state brw_blend_constant_color = {
/* Constant single cliprect for framebuffer object or DRI2 drawing */
static void upload_drawing_rect(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
GLcontext *ctx = &intel->ctx;
if (!intel->constant_cliprect)
return;
BEGIN_BATCH(4, NO_LOOP_CLIPRECTS);
OUT_BATCH(_3DSTATE_DRAWRECT_INFO_I965);
OUT_BATCH(0); /* xmin, ymin */
OUT_BATCH(((ctx->DrawBuffer->Width - 1) & 0xffff) |
((ctx->DrawBuffer->Height - 1) << 16));
OUT_BATCH(0);
OUT_BATCH(((brw->fb.width - 1) & 0xffff) |
((brw->fb.height - 1) << 16));
OUT_BATCH(0);
ADVANCE_BATCH();
}
@ -114,8 +107,6 @@ static void prepare_binding_table_pointers(struct brw_context *brw)
*/
static void upload_binding_table_pointers(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
BEGIN_BATCH(6, IGNORE_CLIPRECTS);
OUT_BATCH(CMD_BINDING_TABLE_PTRS << 16 | (6 - 2));
if (brw->vs.bind_bo != NULL)
@ -148,8 +139,6 @@ const struct brw_tracked_state brw_binding_table_pointers = {
*/
static void upload_pipelined_state_pointers(struct brw_context *brw )
{
struct intel_context *intel = &brw->intel;
BEGIN_BATCH(7, IGNORE_CLIPRECTS);
OUT_BATCH(CMD_PIPELINED_STATE_POINTERS << 16 | (7 - 2));
OUT_RELOC(brw->vs.state_bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
@ -210,7 +199,6 @@ static void prepare_depthbuffer(struct brw_context *brw)
static void emit_depthbuffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct intel_region *region = brw->state.depth_region;
unsigned int len = (BRW_IS_G4X(brw) || BRW_IS_IGDNG(brw)) ? 6 : 5;
@ -287,7 +275,6 @@ const struct brw_tracked_state brw_depthbuffer = {
static void upload_polygon_stipple(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_polygon_stipple bps;
GLuint i;
@ -401,7 +388,6 @@ const struct brw_tracked_state brw_aa_line_parameters = {
static void upload_line_stipple(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_line_stipple bls;
GLfloat tmp;
GLint tmpi;
@ -507,8 +493,6 @@ const struct brw_tracked_state brw_invarient_state = {
*/
static void upload_state_base_address( struct brw_context *brw )
{
struct intel_context *intel = &brw->intel;
/* Output the structure (brw_state_base_address) directly to the
* batchbuffer, so we can emit relocations inline.
*/

View file

@ -1,5 +1,9 @@
/* _NEW_STENCIL */
if (key->dsa.stencil[0].enable) {
static void *
brw_create_depth_stencil( struct pipe_context *pipe,
const struct pipe_depth_stencil_alpha_state *tmpl )
{
if (tmpl->stencil[0].enable) {
cc.cc0.stencil_enable = 1;
cc.cc0.stencil_func =
intel_translate_compare_func(key->stencil_func[0]);
@ -13,7 +17,7 @@
cc.cc1.stencil_write_mask = key->stencil_write_mask[0];
cc.cc1.stencil_test_mask = key->stencil_test_mask[0];
if (key->stencil_two_side) {
if (tmpl->stencil[1].enable) {
cc.cc0.bf_stencil_enable = 1;
cc.cc0.bf_stencil_func =
intel_translate_compare_func(key->stencil_func[1]);
@ -30,9 +34,8 @@
/* Not really sure about this:
*/
if (key->stencil_write_mask[0] ||
(key->stencil_two_side && key->stencil_write_mask[1]))
cc.cc0.stencil_write_enable = 1;
cc.cc0.stencil_write_enable = (cc.cc1.stencil_write_mask ||
cc.cc2.bf_stencil_write_mask);
}
@ -50,3 +53,6 @@
cc.cc2.depth_test_function = intel_translate_compare_func(key->depth_func);
cc.cc2.depth_write_enable = key->depth_write;
}
}

View file

@ -2,12 +2,12 @@
/**
* called from intelDrawBuffer()
*/
static void brw_set_draw_region( struct intel_context *intel,
static void brw_set_draw_region( struct pipe_context *pipe,
struct intel_region *color_regions[],
struct intel_region *depth_region,
GLuint num_color_regions)
{
struct brw_context *brw = brw_context(&intel->ctx);
struct brw_context *brw = brw_context(pipe);
GLuint i;
/* release old color/depth regions */

View file

@ -13,10 +13,8 @@ static void brw_finish_batch(struct intel_context *intel)
/**
* called from intelFlushBatchLocked
*/
static void brw_new_batch( struct intel_context *intel )
static void brw_new_batch( struct brw_context *brw )
{
struct brw_context *brw = brw_context(&intel->ctx);
/* Check that we didn't just wrap our batchbuffer at a bad time. */
assert(!brw->no_batch_wrap);
@ -36,14 +34,14 @@ static void brw_new_batch( struct intel_context *intel )
* a new buffer next time.
*/
if (brw->vb.upload.bo != NULL) {
dri_bo_unreference(brw->vb.upload.bo);
brw->sws->bo_unreference(brw->vb.upload.bo);
brw->vb.upload.bo = NULL;
brw->vb.upload.offset = 0;
}
}
static void brw_note_fence( struct intel_context *intel, GLuint fence )
static void brw_note_fence( struct brw_context *brw, GLuint fence )
{
brw_context(&intel->ctx)->state.dirty.brw |= BRW_NEW_FENCE;
}

View file

@ -38,8 +38,7 @@
* required for handling queries, so that we can be sure that we won't
* have to emit a batchbuffer without getting the ending PS_DEPTH_COUNT.
*/
#include "main/simple_list.h"
#include "main/imports.h"
#include "util/u_simple_list.h"
#include "brw_context.h"
#include "brw_state.h"
@ -64,59 +63,57 @@ brw_queryobj_get_results(struct brw_query_object *query)
}
dri_bo_unmap(query->bo);
dri_bo_unreference(query->bo);
brw->sws->bo_unreference(query->bo);
query->bo = NULL;
}
static struct gl_query_object *
brw_new_query_object(GLcontext *ctx, GLuint id)
static struct pipe_query *
brw_query_create(struct pipe_context *pipe, unsigned type )
{
struct brw_query_object *query;
query = _mesa_calloc(sizeof(struct brw_query_object));
query->Base.Id = id;
query->Base.Result = 0;
query->Base.Active = GL_FALSE;
query->Base.Ready = GL_TRUE;
return &query->Base;
switch (query->type) {
case PIPE_QUERY_OCCLUSION_COUNTER:
query = CALLOC_STRUCT( brw_query_object );
if (query == NULL)
return NULL;
return &query->Base;
default:
return NULL;
}
}
static void
brw_delete_query(GLcontext *ctx, struct gl_query_object *q)
brw_query_destroy(struct pipe_context *pipe, struct pipe_query *q)
{
struct brw_query_object *query = (struct brw_query_object *)q;
dri_bo_unreference(query->bo);
_mesa_free(query);
brw->sws->bo_unreference(query->bo);
FREE(query);
}
static void
brw_begin_query(GLcontext *ctx, struct gl_query_object *q)
brw_begin_query(struct pipe_context *pipe, struct pipe_query *q)
{
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = intel_context(ctx);
struct brw_context *brw = brw_context(pipe);
struct brw_query_object *query = (struct brw_query_object *)q;
/* Reset our driver's tracking of query state. */
dri_bo_unreference(query->bo);
brw->sws->bo_unreference(query->bo);
query->bo = NULL;
query->first_index = -1;
query->last_index = -1;
insert_at_head(&brw->query.active_head, query);
intel->stats_wm++;
brw->stats_wm++;
brw->dirty.mesa |= PIPE_NEW_QUERY;
}
/**
* Begin the ARB_occlusion_query query on a query object.
*/
static void
brw_end_query(GLcontext *ctx, struct gl_query_object *q)
brw_end_query(struct pipe_context *pipe, struct pipe_query *q)
{
struct brw_context *brw = brw_context(ctx);
struct intel_context *intel = intel_context(ctx);
struct brw_context *brw = brw_context(pipe);
struct brw_query_object *query = (struct brw_query_object *)q;
/* Flush the batchbuffer in case it has writes to our query BO.
@ -125,18 +122,18 @@ brw_end_query(GLcontext *ctx, struct gl_query_object *q)
*/
if (query->bo) {
brw_emit_query_end(brw);
intel_batchbuffer_flush(intel->batch);
intel_batchbuffer_flush(brw->batch);
dri_bo_unreference(brw->query.bo);
brw->sws->bo_unreference(brw->query.bo);
brw->query.bo = NULL;
}
remove_from_list(query);
intel->stats_wm--;
brw->stats_wm--;
brw->dirty.mesa |= PIPE_NEW_QUERY;
}
static void brw_wait_query(GLcontext *ctx, struct gl_query_object *q)
static void brw_wait_query(struct pipe_context *pipe, struct pipe_query *q)
{
struct brw_query_object *query = (struct brw_query_object *)q;
@ -144,7 +141,7 @@ static void brw_wait_query(GLcontext *ctx, struct gl_query_object *q)
query->Base.Ready = GL_TRUE;
}
static void brw_check_query(GLcontext *ctx, struct gl_query_object *q)
static void brw_check_query(struct pipe_context *pipe, struct pipe_query *q)
{
struct brw_query_object *query = (struct brw_query_object *)q;
@ -158,8 +155,6 @@ static void brw_check_query(GLcontext *ctx, struct gl_query_object *q)
void
brw_prepare_query_begin(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
/* Skip if we're not doing any queries. */
if (is_empty_list(&brw->query.active_head))
return;
@ -167,10 +162,10 @@ brw_prepare_query_begin(struct brw_context *brw)
/* Get a new query BO if we're going to need it. */
if (brw->query.bo == NULL ||
brw->query.index * 2 + 1 >= 4096 / sizeof(uint64_t)) {
dri_bo_unreference(brw->query.bo);
brw->sws->bo_unreference(brw->query.bo);
brw->query.bo = NULL;
brw->query.bo = dri_bo_alloc(intel->bufmgr, "query", 4096, 1);
brw->query.bo = dri_bo_alloc(brw->bufmgr, "query", 4096, 1);
brw->query.index = 0;
}
@ -181,7 +176,6 @@ brw_prepare_query_begin(struct brw_context *brw)
void
brw_emit_query_begin(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct brw_query_object *query;
/* Skip if we're not doing any queries, or we've emitted the start. */
@ -209,7 +203,7 @@ brw_emit_query_begin(struct brw_context *brw)
if (query->bo != brw->query.bo) {
if (query->bo != NULL)
brw_queryobj_get_results(query);
dri_bo_reference(brw->query.bo);
brw->sws->bo_reference(brw->query.bo);
query->bo = brw->query.bo;
query->first_index = brw->query.index;
}
@ -222,8 +216,6 @@ brw_emit_query_begin(struct brw_context *brw)
void
brw_emit_query_end(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
if (!brw->query.active)
return;

View file

@ -1,166 +0,0 @@
/*
Copyright (C) Intel Corp. 2006. All Rights Reserved.
Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to
develop this 3D driver.
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>
*/
#include "main/imports.h"
#include "main/enums.h"
#include "shader/prog_parameter.h"
#include "shader/program.h"
#include "shader/programopt.h"
#include "tnl/tnl.h"
#include "brw_context.h"
#include "brw_util.h"
#include "brw_wm.h"
static void brwBindProgram( GLcontext *ctx,
GLenum target,
struct gl_program *prog )
{
struct brw_context *brw = brw_context(ctx);
switch (target) {
case GL_VERTEX_PROGRAM_ARB:
brw->state.dirty.brw |= BRW_NEW_VERTEX_PROGRAM;
break;
case GL_FRAGMENT_PROGRAM_ARB:
brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM;
break;
}
}
static struct gl_program *brwNewProgram( GLcontext *ctx,
GLenum target,
GLuint id )
{
struct brw_context *brw = brw_context(ctx);
switch (target) {
case GL_VERTEX_PROGRAM_ARB: {
struct brw_vertex_program *prog = CALLOC_STRUCT(brw_vertex_program);
if (prog) {
prog->id = brw->program_id++;
return _mesa_init_vertex_program( ctx, &prog->program,
target, id );
}
else
return NULL;
}
case GL_FRAGMENT_PROGRAM_ARB: {
struct brw_fragment_program *prog = CALLOC_STRUCT(brw_fragment_program);
if (prog) {
prog->id = brw->program_id++;
return _mesa_init_fragment_program( ctx, &prog->program,
target, id );
}
else
return NULL;
}
default:
return _mesa_new_program(ctx, target, id);
}
}
static void brwDeleteProgram( GLcontext *ctx,
struct gl_program *prog )
{
if (prog->Target == GL_FRAGMENT_PROGRAM_ARB) {
struct gl_fragment_program *fprog = (struct gl_fragment_program *) prog;
struct brw_fragment_program *brw_fprog = brw_fragment_program(fprog);
dri_bo_unreference(brw_fprog->const_buffer);
}
_mesa_delete_program( ctx, prog );
}
static GLboolean brwIsProgramNative( GLcontext *ctx,
GLenum target,
struct gl_program *prog )
{
return GL_TRUE;
}
static void brwProgramStringNotify( GLcontext *ctx,
GLenum target,
struct gl_program *prog )
{
struct brw_context *brw = brw_context(ctx);
if (target == GL_FRAGMENT_PROGRAM_ARB) {
struct gl_fragment_program *fprog = (struct gl_fragment_program *) prog;
struct brw_fragment_program *newFP = brw_fragment_program(fprog);
const struct brw_fragment_program *curFP =
brw_fragment_program_const(brw->fragment_program);
if (fprog->FogOption) {
_mesa_append_fog_code(ctx, fprog);
fprog->FogOption = GL_NONE;
}
if (newFP == curFP)
brw->state.dirty.brw |= BRW_NEW_FRAGMENT_PROGRAM;
newFP->id = brw->program_id++;
newFP->isGLSL = brw_wm_is_glsl(fprog);
}
else if (target == GL_VERTEX_PROGRAM_ARB) {
struct gl_vertex_program *vprog = (struct gl_vertex_program *) prog;
struct brw_vertex_program *newVP = brw_vertex_program(vprog);
const struct brw_vertex_program *curVP =
brw_vertex_program_const(brw->vertex_program);
if (newVP == curVP)
brw->state.dirty.brw |= BRW_NEW_VERTEX_PROGRAM;
if (newVP->program.IsPositionInvariant) {
_mesa_insert_mvp_code(ctx, &newVP->program);
}
newVP->id = brw->program_id++;
/* Also tell tnl about it:
*/
_tnl_program_string(ctx, target, prog);
}
}
void brwInitFragProgFuncs( struct dd_function_table *functions )
{
assert(functions->ProgramStringNotify == _tnl_program_string);
functions->BindProgram = brwBindProgram;
functions->NewProgram = brwNewProgram;
functions->DeleteProgram = brwDeleteProgram;
functions->IsProgramNative = brwIsProgramNative;
functions->ProgramStringNotify = brwProgramStringNotify;
}

View file

@ -30,10 +30,6 @@
*/
#include "main/glheader.h"
#include "main/macros.h"
#include "main/enums.h"
#include "intel_batchbuffer.h"
#include "brw_defines.h"
@ -46,7 +42,6 @@
static void compile_sf_prog( struct brw_context *brw,
struct brw_sf_prog_key *key )
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_sf_compile c;
const GLuint *program;
GLuint program_size;
@ -116,7 +111,7 @@ static void compile_sf_prog( struct brw_context *brw,
/* Upload
*/
dri_bo_unreference(brw->sf.prog_bo);
brw->sws->bo_unreference(brw->sf.prog_bo);
brw->sf.prog_bo = brw_upload_cache( &brw->cache, BRW_SF_PROG,
&c.key, sizeof(c.key),
NULL, 0,
@ -129,7 +124,6 @@ static void compile_sf_prog( struct brw_context *brw,
*/
static void upload_sf_prog(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_sf_prog_key key;
memset(&key, 0, sizeof(key));
@ -167,7 +161,7 @@ static void upload_sf_prog(struct brw_context *brw)
key.do_twoside_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide);
/* _NEW_HINT */
key.linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST);
key.linear_color = 0;
/* _NEW_POLYGON */
if (key.do_twoside_color) {
@ -179,7 +173,7 @@ static void upload_sf_prog(struct brw_context *brw)
key.frontface_ccw = (ctx->Polygon.FrontFace == GL_CCW) ^ (ctx->DrawBuffer->Name != 0);
}
dri_bo_unreference(brw->sf.prog_bo);
brw->sws->bo_unreference(brw->sf.prog_bo);
brw->sf.prog_bo = brw_search_cache(&brw->cache, BRW_SF_PROG,
&key, sizeof(key),
NULL, 0,

View file

@ -45,19 +45,23 @@
#define SF_UNFILLED_TRIS 3
struct brw_sf_prog_key {
GLuint attrs:32;
/* Bitmask of linear and perspective interpolated inputs, 0..nr
*/
GLuint persp_attrs:32;
GLuint linear_attrs:32;
GLuint primitive:2;
GLuint do_twoside_color:1;
GLuint do_flat_shading:1;
GLuint frontface_ccw:1;
GLuint do_point_sprite:1;
GLuint linear_color:1; /**< linear interp vs. perspective interp */
GLuint sprite_origin_lower_left:1;
GLuint pad:25;
GLenum SpriteOrigin;
};
struct brw_sf_point_tex {
GLboolean CoordReplace;
GLboolean CoordReplace;
};
struct brw_sf_compile {

View file

@ -30,10 +30,6 @@
*/
#include "main/glheader.h"
#include "main/macros.h"
#include "main/enums.h"
#include "intel_batchbuffer.h"
#include "brw_defines.h"
@ -305,6 +301,10 @@ static void invert_det( struct brw_sf_compile *c)
}
/* Two attributes packed into a wide register. Figure out if either
* or both of them need linear/perspective interpolation. Constant
* regs are left as-is.
*/
static GLboolean calculate_masks( struct brw_sf_compile *c,
GLuint reg,
GLushort *pc,
@ -312,20 +312,8 @@ static GLboolean calculate_masks( struct brw_sf_compile *c,
GLushort *pc_linear)
{
GLboolean is_last_attr = (reg == c->nr_setup_regs - 1);
GLuint persp_mask;
GLuint linear_mask;
if (c->key.do_flat_shading || c->key.linear_color)
persp_mask = c->key.attrs & ~(FRAG_BIT_WPOS |
FRAG_BIT_COL0 |
FRAG_BIT_COL1);
else
persp_mask = c->key.attrs & ~(FRAG_BIT_WPOS);
if (c->key.do_flat_shading)
linear_mask = c->key.attrs & ~(FRAG_BIT_COL0|FRAG_BIT_COL1);
else
linear_mask = c->key.attrs;
GLuint persp_mask = c->key.persp_attrs;
GLuint linear_mask = c->key.linear_attrs;
*pc_persp = 0;
*pc_linear = 0;
@ -570,7 +558,7 @@ void brw_emit_point_sprite_setup( struct brw_sf_compile *c, GLboolean allocate)
{
brw_set_predicate_control_flag_value(p, pc);
if (tex->CoordReplace) {
if (c->key.SpriteOrigin == GL_LOWER_LEFT) {
if (c->key.sprite_origin_lower_left) {
brw_MUL(p, c->m3C0, c->inv_w[0], brw_imm_f(1.0));
brw_MOV(p, vec1(suboffset(c->m3C0, 0)), brw_imm_f(0.0));
}

View file

@ -34,12 +34,9 @@
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
#include "main/macros.h"
#include "intel_fbo.h"
static void upload_sf_vp(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
const GLfloat depth_scale = 1.0F / ctx->DrawBuffer->_DepthMaxF;
struct brw_sf_viewport sfv;
GLfloat y_scale, y_bias;
@ -92,7 +89,7 @@ static void upload_sf_vp(struct brw_context *brw)
sfv.scissor.ymax = ctx->DrawBuffer->Height - ctx->DrawBuffer->_Ymin - 1;
}
dri_bo_unreference(brw->sf.vp_bo);
brw->sws->bo_unreference(brw->sf.vp_bo);
brw->sf.vp_bo = brw_cache_data( &brw->cache, BRW_SF_VP, &sfv, NULL, 0 );
}
@ -126,7 +123,6 @@ struct brw_sf_unit_key {
static void
sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
{
GLcontext *ctx = &brw->intel.ctx;
memset(key, 0, sizeof(*key));
/* CACHE_NEW_SF_PROG */
@ -159,12 +155,12 @@ sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
}
static dri_bo *
static struct brw_winsys_buffer *
sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
dri_bo **reloc_bufs)
struct brw_winsys_buffer **reloc_bufs)
{
struct brw_sf_unit_state sf;
dri_bo *bo;
struct brw_winsys_buffer *bo;
int chipset_max_threads;
memset(&sf, 0, sizeof(sf));
@ -332,14 +328,14 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
static void upload_sf_unit( struct brw_context *brw )
{
struct brw_sf_unit_key key;
dri_bo *reloc_bufs[2];
struct brw_winsys_buffer *reloc_bufs[2];
sf_unit_populate_key(brw, &key);
reloc_bufs[0] = brw->sf.prog_bo;
reloc_bufs[1] = brw->sf.vp_bo;
dri_bo_unreference(brw->sf.state_bo);
brw->sws->bo_unreference(brw->sf.state_bo);
brw->sf.state_bo = brw_search_cache(&brw->cache, BRW_SF_UNIT,
&key, sizeof(key),
reloc_bufs, 2,

View file

@ -36,12 +36,12 @@
#include "brw_context.h"
static inline void
brw_add_validated_bo(struct brw_context *brw, dri_bo *bo)
brw_add_validated_bo(struct brw_context *brw, struct brw_winsys_buffer *bo)
{
assert(brw->state.validated_bo_count < ARRAY_SIZE(brw->state.validated_bos));
if (bo != NULL) {
dri_bo_reference(bo);
brw->sws->bo_reference(bo);
brw->state.validated_bos[brw->state.validated_bo_count++] = bo;
}
};
@ -95,9 +95,9 @@ const struct brw_tracked_state brw_index_buffer;
* Use same key for WM and VS surfaces.
*/
struct brw_surface_key {
GLenum target, depthmode;
dri_bo *bo;
GLint format, internal_format;
unsigned target;
struct brw_winsys_buffer *bo;
GLint format;
GLint first_level, last_level;
GLint width, height, depth;
GLint pitch, cpp;
@ -116,42 +116,42 @@ void brw_destroy_state(struct brw_context *brw);
/***********************************************************************
* brw_state_cache.c
*/
dri_bo *brw_cache_data(struct brw_cache *cache,
struct brw_winsys_buffer *brw_cache_data(struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *data,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs);
dri_bo *brw_cache_data_sz(struct brw_cache *cache,
struct brw_winsys_buffer *brw_cache_data_sz(struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *data,
GLuint data_size,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs);
dri_bo *brw_upload_cache( struct brw_cache *cache,
struct brw_winsys_buffer *brw_upload_cache( struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *key,
GLuint key_sz,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs,
const void *data,
GLuint data_sz,
const void *aux,
void *aux_return );
dri_bo *brw_search_cache( struct brw_cache *cache,
struct brw_winsys_buffer *brw_search_cache( struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *key,
GLuint key_size,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs,
void *aux_return);
void brw_state_cache_check_size( struct brw_context *brw );
void brw_init_caches( struct brw_context *brw );
void brw_destroy_caches( struct brw_context *brw );
void brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo);
void brw_state_cache_bo_delete(struct brw_cache *cache, struct brw_winsys_buffer *bo);
/***********************************************************************
* brw_state_batch.c
@ -166,7 +166,7 @@ void brw_destroy_batch_cache( struct brw_context *brw );
void brw_clear_batch_cache( struct brw_context *brw );
/* brw_wm_surface_state.c */
dri_bo *
struct brw_winsys_buffer *
brw_create_constant_surface( struct brw_context *brw,
struct brw_surface_key *key );

View file

@ -33,7 +33,6 @@
#include "brw_state.h"
#include "intel_batchbuffer.h"
#include "main/imports.h"

View file

@ -56,7 +56,6 @@
* incorrect program is run for the other instance.
*/
#include "main/imports.h"
#include "brw_state.h"
#include "intel_batchbuffer.h"
@ -72,7 +71,7 @@
static GLuint
hash_key(const void *key, GLuint key_size,
dri_bo **reloc_bufs, GLuint nr_reloc_bufs)
struct brw_winsys_buffer **reloc_bufs, GLuint nr_reloc_bufs)
{
GLuint *ikey = (GLuint *)key;
GLuint hash = 0, i;
@ -88,7 +87,7 @@ hash_key(const void *key, GLuint key_size,
/* Include the BO pointers as key data as well */
ikey = (GLuint *)reloc_bufs;
key_size = nr_reloc_bufs * sizeof(dri_bo *);
key_size = nr_reloc_bufs * sizeof(struct brw_winsys_buffer *);
for (i = 0; i < key_size/4; i++) {
hash ^= ikey[i];
hash = (hash << 5) | (hash >> 27);
@ -103,14 +102,14 @@ hash_key(const void *key, GLuint key_size,
*/
static void
update_cache_last(struct brw_cache *cache, enum brw_cache_id cache_id,
dri_bo *bo)
struct brw_winsys_buffer *bo)
{
if (bo == cache->last_bo[cache_id])
return; /* no change */
dri_bo_unreference(cache->last_bo[cache_id]);
brw->sws->bo_unreference(cache->last_bo[cache_id]);
cache->last_bo[cache_id] = bo;
dri_bo_reference(cache->last_bo[cache_id]);
brw->sws->bo_reference(cache->last_bo[cache_id]);
cache->brw->state.dirty.cache |= 1 << cache_id;
}
@ -118,7 +117,7 @@ update_cache_last(struct brw_cache *cache, enum brw_cache_id cache_id,
static struct brw_cache_item *
search_cache(struct brw_cache *cache, enum brw_cache_id cache_id,
GLuint hash, const void *key, GLuint key_size,
dri_bo **reloc_bufs, GLuint nr_reloc_bufs)
struct brw_winsys_buffer **reloc_bufs, GLuint nr_reloc_bufs)
{
struct brw_cache_item *c;
@ -139,7 +138,7 @@ search_cache(struct brw_cache *cache, enum brw_cache_id cache_id,
memcmp(c->key, key, key_size) == 0 &&
c->nr_reloc_bufs == nr_reloc_bufs &&
memcmp(c->reloc_bufs, reloc_bufs,
nr_reloc_bufs * sizeof(dri_bo *)) == 0)
nr_reloc_bufs * sizeof(struct brw_winsys_buffer *)) == 0)
return c;
}
@ -173,12 +172,12 @@ rehash(struct brw_cache *cache)
/**
* Returns the buffer object matching cache_id and key, or NULL.
*/
dri_bo *
struct brw_winsys_buffer *
brw_search_cache(struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *key,
GLuint key_size,
dri_bo **reloc_bufs, GLuint nr_reloc_bufs,
struct brw_winsys_buffer **reloc_bufs, GLuint nr_reloc_bufs,
void *aux_return)
{
struct brw_cache_item *item;
@ -195,17 +194,17 @@ brw_search_cache(struct brw_cache *cache,
update_cache_last(cache, cache_id, item->bo);
dri_bo_reference(item->bo);
brw->sws->bo_reference(item->bo);
return item->bo;
}
dri_bo *
struct brw_winsys_buffer *
brw_upload_cache( struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *key,
GLuint key_size,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs,
const void *data,
GLuint data_size,
@ -214,10 +213,10 @@ brw_upload_cache( struct brw_cache *cache,
{
struct brw_cache_item *item = CALLOC_STRUCT(brw_cache_item);
GLuint hash = hash_key(key, key_size, reloc_bufs, nr_reloc_bufs);
GLuint relocs_size = nr_reloc_bufs * sizeof(dri_bo *);
GLuint relocs_size = nr_reloc_bufs * sizeof(struct brw_winsys_buffer *);
GLuint aux_size = cache->aux_size[cache_id];
void *tmp;
dri_bo *bo;
struct brw_winsys_buffer *bo;
int i;
/* Create the buffer object to contain the data */
@ -233,7 +232,7 @@ brw_upload_cache( struct brw_cache *cache,
memcpy(tmp + key_size + aux_size, reloc_bufs, relocs_size);
for (i = 0; i < nr_reloc_bufs; i++) {
if (reloc_bufs[i] != NULL)
dri_bo_reference(reloc_bufs[i]);
brw->sws->bo_reference(reloc_bufs[i]);
}
item->cache_id = cache_id;
@ -244,7 +243,7 @@ brw_upload_cache( struct brw_cache *cache,
item->nr_reloc_bufs = nr_reloc_bufs;
item->bo = bo;
dri_bo_reference(bo);
brw->sws->bo_reference(bo);
item->data_size = data_size;
if (cache->n_items > cache->size * 1.5)
@ -277,15 +276,15 @@ brw_upload_cache( struct brw_cache *cache,
/**
* This doesn't really work with aux data. Use search/upload instead
*/
dri_bo *
struct brw_winsys_buffer *
brw_cache_data_sz(struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *data,
GLuint data_size,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs)
{
dri_bo *bo;
struct brw_winsys_buffer *bo;
struct brw_cache_item *item;
GLuint hash = hash_key(data, data_size, reloc_bufs, nr_reloc_bufs);
@ -293,7 +292,7 @@ brw_cache_data_sz(struct brw_cache *cache,
reloc_bufs, nr_reloc_bufs);
if (item) {
update_cache_last(cache, cache_id, item->bo);
dri_bo_reference(item->bo);
brw->sws->bo_reference(item->bo);
return item->bo;
}
@ -314,11 +313,11 @@ brw_cache_data_sz(struct brw_cache *cache,
* better to use, as the potentially changing offsets in the data-used-as-key
* will result in excessive cache misses.
*/
dri_bo *
struct brw_winsys_buffer *
brw_cache_data(struct brw_cache *cache,
enum brw_cache_id cache_id,
const void *data,
dri_bo **reloc_bufs,
struct brw_winsys_buffer **reloc_bufs,
GLuint nr_reloc_bufs)
{
return brw_cache_data_sz(cache, cache_id, data, cache->key_size[cache_id],
@ -497,8 +496,8 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
next = c->next;
for (j = 0; j < c->nr_reloc_bufs; j++)
dri_bo_unreference(c->reloc_bufs[j]);
dri_bo_unreference(c->bo);
brw->sws->bo_unreference(c->reloc_bufs[j]);
brw->sws->bo_unreference(c->bo);
free((void *)c->key);
free(c);
}
@ -523,7 +522,7 @@ brw_clear_cache(struct brw_context *brw, struct brw_cache *cache)
* at the cost of walking the entire hash table.
*/
void
brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo)
brw_state_cache_bo_delete(struct brw_cache *cache, struct brw_winsys_buffer *bo)
{
struct brw_cache_item **prev;
GLuint i;
@ -535,14 +534,14 @@ brw_state_cache_bo_delete(struct brw_cache *cache, dri_bo *bo)
for (prev = &cache->items[i]; *prev;) {
struct brw_cache_item *c = *prev;
if (drm_intel_bo_references(c->bo, bo)) {
if (cache->sws->bo_references(c->bo, bo)) {
int j;
*prev = c->next;
for (j = 0; j < c->nr_reloc_bufs; j++)
dri_bo_unreference(c->reloc_bufs[j]);
dri_bo_unreference(c->bo);
brw->sws->bo_unreference(c->reloc_bufs[j]);
brw->sws->bo_unreference(c->bo);
free((void *)c->key);
free(c);
cache->n_items--;
@ -580,7 +579,7 @@ brw_destroy_cache(struct brw_context *brw, struct brw_cache *cache)
brw_clear_cache(brw, cache);
for (i = 0; i < BRW_MAX_CACHE; i++) {
dri_bo_unreference(cache->last_bo[i]);
brw->sws->bo_unreference(cache->last_bo[i]);
free(cache->name[i]);
}
free(cache->items);

View file

@ -25,8 +25,6 @@
*
*/
#include "main/mtypes.h"
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
@ -55,7 +53,7 @@ state_out(const char *name, void *data, uint32_t hw_offset, int index,
/** Generic, undecoded state buffer debug printout */
static void
state_struct_out(const char *name, dri_bo *buffer, unsigned int state_size)
state_struct_out(const char *name, struct brw_winsys_buffer *buffer, unsigned int state_size)
{
int i;
@ -102,7 +100,7 @@ static void dump_wm_surface_state(struct brw_context *brw)
int i;
for (i = 0; i < brw->wm.nr_surfaces; i++) {
dri_bo *surf_bo = brw->wm.surf_bo[i];
struct brw_winsys_buffer *surf_bo = brw->wm.surf_bo[i];
unsigned int surfoff;
struct brw_surface_state *surf;
char name[20];
@ -162,7 +160,7 @@ static void dump_sf_viewport_state(struct brw_context *brw)
dri_bo_unmap(brw->sf.vp_bo);
}
static void brw_debug_prog(const char *name, dri_bo *prog)
static void brw_debug_prog(const char *name, struct brw_winsys_buffer *prog)
{
unsigned int i;
uint32_t *data;
@ -202,10 +200,8 @@ static void brw_debug_prog(const char *name, dri_bo *prog)
* The buffer offsets printed rely on the buffer containing the last offset
* it was validated at.
*/
void brw_debug_batch(struct intel_context *intel)
void brw_debug_batch(struct brw_context *brw)
{
struct brw_context *brw = brw_context(&intel->ctx);
state_struct_out("WM bind", brw->wm.bind_bo, 4 * brw->wm.nr_surfaces);
dump_wm_surface_state(brw);

View file

@ -149,7 +149,7 @@ brw_clear_validated_bos(struct brw_context *brw)
/* Clear the last round of validated bos */
for (i = 0; i < brw->state.validated_bo_count; i++) {
dri_bo_unreference(brw->state.validated_bos[i]);
brw->sws->bo_unreference(brw->state.validated_bos[i]);
brw->state.validated_bos[i] = NULL;
}
brw->state.validated_bo_count = 0;
@ -272,8 +272,6 @@ brw_print_dirty_count(struct dirty_bit_map *bit_map, int32_t bits)
*/
enum pipe_error brw_validate_state( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct intel_context *intel = &brw->intel;
struct brw_state_flags *state = &brw->state.dirty;
GLuint i;

View file

@ -33,6 +33,7 @@
#ifndef BRW_STRUCTS_H
#define BRW_STRUCTS_H
#include "brw_types.h"
/** Number of general purpose registers (VS, WM, etc) */
#define BRW_MAX_GRF 128

View file

@ -6,7 +6,6 @@ static GLboolean check_fallbacks( struct brw_context *brw,
const struct _mesa_prim *prim,
GLuint nr_prims )
{
GLcontext *ctx = &brw->intel.ctx;
GLuint i;
/* If we don't require strict OpenGL conformance, never

View file

@ -30,11 +30,6 @@
*/
#include "main/glheader.h"
#include "main/mtypes.h"
#include "main/teximage.h"
#include "intel_context.h"
#include "intel_regions.h"
#include "intel_tex.h"
#include "brw_context.h"
@ -45,8 +40,6 @@
*/
void brw_validate_textures( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct intel_context *intel = &brw->intel;
int i;
for (i = 0; i < BRW_MAX_TEX_UNIT; i++) {

View file

@ -34,13 +34,11 @@
#include "intel_mipmap_tree.h"
#include "intel_tex_layout.h"
#include "intel_context.h"
#include "main/macros.h"
#include "intel_chipset.h"
#define FILE_DEBUG_FLAG DEBUG_MIPTREE
GLboolean brw_miptree_layout(struct intel_context *intel,
GLboolean brw_miptree_layout(struct brw_context *brw,
struct intel_mipmap_tree *mt,
uint32_t tiling)
{
@ -67,7 +65,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
mt->pitch = ALIGN(mt->width0, align_w);
}
if (mt->first_level != mt->last_level) {
if (mt->last_level != 0) {
GLuint mip1_width;
if (mt->compressed) {
@ -93,7 +91,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
mt->total_height = (y_pitch + ALIGN(minify(y_pitch), align_h) + 11 * align_h) * 6;
}
for (level = mt->first_level; level <= mt->last_level; level++) {
for (level = 0; level <= mt->last_level; level++) {
GLuint img_height;
GLuint nr_images = 6;
GLuint q = 0;
@ -109,7 +107,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
else
img_height = ALIGN(height, align_h);
if (level == mt->first_level + 1) {
if (level == 1) {
x += ALIGN(width, align_w);
}
else {
@ -147,7 +145,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel,
pack_x_pitch = width;
pack_x_nr = 1;
for (level = mt->first_level ; level <= mt->last_level ; level++) {
for (level = 0 ; level <= mt->last_level ; level++) {
GLuint nr_images = mt->target == GL_TEXTURE_3D ? depth : 6;
GLint x = 0;
GLint y = 0;

View file

@ -1,11 +1,18 @@
#ifndef BRW_TYPES_H
#define BRW_TYPES_H
typedef GLuint uint32_t;
typedef GLubyte uint8_t;
typedef GLushort uint16_t;
#include "pipe/p_compiler.h"
typedef uint32_t GLuint;
typedef uint8_t GLubyte;
typedef uint16_t GLushort;
typedef int32_t GLint;
typedef int8_t GLbyte;
typedef int16_t GLshort;
typedef float GLfloat;
/* no GLenum, translate all away */
typedef GLboolean uint8_t;
typedef uint8_t GLboolean;
#endif

View file

@ -30,8 +30,6 @@
*/
#include "main/mtypes.h"
#include "shader/prog_parameter.h"
#include "brw_util.h"
#include "brw_defines.h"

View file

@ -33,7 +33,7 @@
#ifndef BRW_UTIL_H
#define BRW_UTIL_H
#include "main/mtypes.h"
#include "brw_types.h"
extern GLuint brw_count_bits( GLuint val );
extern GLuint brw_parameter_list_state_flags(struct gl_program_parameter_list *paramList);

View file

@ -71,7 +71,7 @@ static void do_vs_prog( struct brw_context *brw,
*/
program = brw_get_program(&c.func, &program_size);
dri_bo_unreference(brw->vs.prog_bo);
brw->sws->bo_unreference(brw->vs.prog_bo);
brw->vs.prog_bo = brw_upload_cache( &brw->cache, BRW_VS_PROG,
&c.key, sizeof(c.key),
NULL, 0,
@ -83,7 +83,6 @@ static void do_vs_prog( struct brw_context *brw,
static void brw_upload_vs_prog(struct brw_context *brw)
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_vs_prog_key key;
struct brw_vertex_program *vp =
(struct brw_vertex_program *)brw->vertex_program;
@ -100,7 +99,7 @@ static void brw_upload_vs_prog(struct brw_context *brw)
/* Make an early check for the key.
*/
dri_bo_unreference(brw->vs.prog_bo);
brw->sws->bo_unreference(brw->vs.prog_bo);
brw->vs.prog_bo = brw_search_cache(&brw->cache, BRW_VS_PROG,
&key, sizeof(key),
NULL, 0,

View file

@ -30,9 +30,6 @@
*/
#include "main/macros.h"
#include "shader/program.h"
#include "shader/prog_parameter.h"
#include "pipe/p_shader_tokens.h"
#include "brw_context.h"
#include "brw_vs.h"

View file

@ -34,7 +34,6 @@
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
#include "main/macros.h"
struct brw_vs_unit_key {
unsigned int total_grf;
@ -51,8 +50,6 @@ struct brw_vs_unit_key {
static void
vs_unit_populate_key(struct brw_context *brw, struct brw_vs_unit_key *key)
{
GLcontext *ctx = &brw->intel.ctx;
memset(key, 0, sizeof(*key));
/* CACHE_NEW_VS_PROG */
@ -79,11 +76,11 @@ vs_unit_populate_key(struct brw_context *brw, struct brw_vs_unit_key *key)
}
}
static dri_bo *
static struct brw_winsys_buffer *
vs_unit_create_from_key(struct brw_context *brw, struct brw_vs_unit_key *key)
{
struct brw_vs_unit_state vs;
dri_bo *bo;
struct brw_winsys_buffer *bo;
int chipset_max_threads;
memset(&vs, 0, sizeof(vs));
@ -163,7 +160,7 @@ static void prepare_vs_unit(struct brw_context *brw)
vs_unit_populate_key(brw, &key);
dri_bo_unreference(brw->vs.state_bo);
brw->sws->bo_unreference(brw->vs.state_bo);
brw->vs.state_bo = brw_search_cache(&brw->cache, BRW_VS_UNIT,
&key, sizeof(key),
&brw->vs.prog_bo, 1,

View file

@ -29,11 +29,6 @@
* Keith Whitwell <keith@tungstengraphics.com>
*/
#include "main/mtypes.h"
#include "main/texformat.h"
#include "main/texstore.h"
#include "shader/prog_parameter.h"
#include "brw_context.h"
#include "brw_state.h"
#include "brw_defines.h"
@ -47,7 +42,6 @@
static drm_intel_bo *
brw_vs_update_constant_buffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct brw_vertex_program *vp =
(struct brw_vertex_program *) brw->vertex_program;
const struct gl_program_parameter_list *params = vp->program.Base.Parameters;
@ -73,7 +67,7 @@ brw_vs_update_constant_buffer(struct brw_context *brw)
* Sets brw->vs.surf_bo[surf] and brw->vp->const_buffer.
*/
static void
brw_update_vs_constant_surface( GLcontext *ctx,
brw_update_vs_constant_surface( struct brw_context *brw,
GLuint surf)
{
struct brw_context *brw = brw_context(ctx);
@ -87,7 +81,7 @@ brw_update_vs_constant_surface( GLcontext *ctx,
/* If we're in this state update atom, we need to update VS constants, so
* free the old buffer and create a new one for the new contents.
*/
dri_bo_unreference(vp->const_buffer);
brw->sws->bo_unreference(vp->const_buffer);
vp->const_buffer = brw_vs_update_constant_buffer(brw);
/* If there's no constant buffer, then no surface BO is needed to point at
@ -101,8 +95,7 @@ brw_update_vs_constant_surface( GLcontext *ctx,
memset(&key, 0, sizeof(key));
key.format = MESA_FORMAT_RGBA_FLOAT32;
key.internal_format = GL_RGBA;
key.format = PIPE_FORMAT_R32G32B32A32_FLOAT;
key.bo = vp->const_buffer;
key.depthmode = GL_NONE;
key.pitch = params->NumParameters;
@ -132,10 +125,10 @@ brw_update_vs_constant_surface( GLcontext *ctx,
/**
* Constructs the binding table for the VS surface state.
*/
static dri_bo *
static struct brw_winsys_buffer *
brw_vs_get_binding_table(struct brw_context *brw)
{
dri_bo *bind_bo;
struct brw_winsys_buffer *bind_bo;
bind_bo = brw_search_cache(&brw->surface_cache, BRW_SS_SURF_BIND,
NULL, 0,
@ -186,7 +179,6 @@ brw_vs_get_binding_table(struct brw_context *brw)
*/
static void prepare_vs_surfaces(struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
int i;
int nr_surfaces = 0;
@ -208,7 +200,7 @@ static void prepare_vs_surfaces(struct brw_context *brw )
* just slightly increases our working set size.
*/
if (brw->vs.nr_surfaces != 0) {
dri_bo_unreference(brw->vs.bind_bo);
brw->sws->bo_unreference(brw->vs.bind_bo);
brw->vs.bind_bo = brw_vs_get_binding_table(brw);
}
}

View file

@ -29,7 +29,6 @@
* Keith Whitwell <keith@tungstengraphics.com>
*/
#include "main/texformat.h"
#include "brw_context.h"
#include "brw_util.h"
#include "brw_wm.h"
@ -186,7 +185,7 @@ static void do_wm_prog( struct brw_context *brw,
*/
program = brw_get_program(&c->func, &program_size);
dri_bo_unreference(brw->wm.prog_bo);
brw->sws->bo_unreference(brw->wm.prog_bo);
brw->wm.prog_bo = brw_upload_cache( &brw->cache, BRW_WM_PROG,
&c->key, sizeof(c->key),
NULL, 0,
@ -200,7 +199,6 @@ static void do_wm_prog( struct brw_context *brw,
static void brw_wm_populate_key( struct brw_context *brw,
struct brw_wm_prog_key *key )
{
GLcontext *ctx = &brw->intel.ctx;
/* BRW_NEW_FRAGMENT_PROGRAM */
const struct brw_fragment_program *fp =
(struct brw_fragment_program *)brw->fragment_program;
@ -329,7 +327,7 @@ static void brw_prepare_wm_prog(struct brw_context *brw)
/* Make an early check for the key.
*/
dri_bo_unreference(brw->wm.prog_bo);
brw->sws->bo_unreference(brw->wm.prog_bo);
brw->wm.prog_bo = brw_search_cache(&brw->cache, BRW_WM_PROG,
&key, sizeof(key),
NULL, 0,

View file

@ -30,7 +30,6 @@
*/
#include "main/macros.h"
#include "brw_context.h"
#include "brw_wm.h"

View file

@ -1,7 +1,3 @@
#include "main/macros.h"
#include "shader/prog_parameter.h"
#include "shader/prog_print.h"
#include "shader/prog_optimize.h"
#include "brw_context.h"
#include "brw_eu.h"
#include "brw_wm.h"

View file

@ -30,7 +30,6 @@
*/
#include "main/mtypes.h"
#include "brw_wm.h"

View file

@ -34,9 +34,6 @@
#include "brw_state.h"
#include "brw_defines.h"
#include "main/macros.h"
/* Samplers aren't strictly wm state from the hardware's perspective,
* but that is the only situation in which we use them in this driver.
@ -79,7 +76,7 @@ static GLint S_FIXED(GLfloat value, GLuint frac_bits)
}
static dri_bo *upload_default_color( struct brw_context *brw,
static struct brw_winsys_buffer *upload_default_color( struct brw_context *brw,
const GLfloat *color )
{
struct brw_sampler_default_color sdc;
@ -102,7 +99,7 @@ struct wm_sampler_key {
float max_aniso;
GLenum minfilter, magfilter;
GLenum comparemode, comparefunc;
dri_bo *sdc_bo;
struct brw_winsys_buffer *sdc_bo;
/** If target is cubemap, take context setting.
*/
@ -115,7 +112,7 @@ struct wm_sampler_key {
* entry.
*/
static void brw_update_sampler_state(struct wm_sampler_entry *key,
dri_bo *sdc_bo,
struct brw_winsys_buffer *sdc_bo,
struct brw_sampler_state *sampler)
{
_mesa_memset(sampler, 0, sizeof(*sampler));
@ -240,7 +237,6 @@ static void
brw_wm_sampler_populate_key(struct brw_context *brw,
struct wm_sampler_key *key)
{
GLcontext *ctx = &brw->intel.ctx;
int unit;
memset(key, 0, sizeof(*key));
@ -272,7 +268,7 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
entry->comparemode = texObj->CompareMode;
entry->comparefunc = texObj->CompareFunc;
dri_bo_unreference(brw->wm.sdc_bo[unit]);
brw->sws->bo_unreference(brw->wm.sdc_bo[unit]);
if (firstImage->_BaseFormat == GL_DEPTH_COMPONENT) {
float bordercolor[4] = {
texObj->BorderColor[0],
@ -300,7 +296,6 @@ brw_wm_sampler_populate_key(struct brw_context *brw,
*/
static void upload_wm_samplers( struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct wm_sampler_key key;
int i;
@ -311,7 +306,7 @@ static void upload_wm_samplers( struct brw_context *brw )
brw->state.dirty.cache |= CACHE_NEW_SAMPLER;
}
dri_bo_unreference(brw->wm.sampler_bo);
brw->sws->bo_unreference(brw->wm.sampler_bo);
brw->wm.sampler_bo = NULL;
if (brw->wm.sampler_count == 0)
return;

View file

@ -60,10 +60,8 @@ struct brw_wm_unit_key {
static void
wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)
{
GLcontext *ctx = &brw->intel.ctx;
const struct gl_fragment_program *fp = brw->fragment_program;
const struct brw_fragment_program *bfp = (struct brw_fragment_program *) fp;
struct intel_context *intel = &brw->intel;
memset(key, 0, sizeof(*key));
@ -121,7 +119,7 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)
/* temporary sanity check assertion */
ASSERT(bfp->isGLSL == brw_wm_is_glsl(fp));
/* _NEW_DEPTH */
/* _NEW_QUERY */
key->stats_wm = intel->stats_wm;
/* _NEW_LINE */
@ -136,12 +134,12 @@ wm_unit_populate_key(struct brw_context *brw, struct brw_wm_unit_key *key)
/**
* Setup wm hardware state. See page 225 of Volume 2
*/
static dri_bo *
static struct brw_winsys_buffer *
wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
dri_bo **reloc_bufs)
struct brw_winsys_buffer **reloc_bufs)
{
struct brw_wm_unit_state wm;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&wm, 0, sizeof(wm));
@ -257,9 +255,8 @@ wm_unit_create_from_key(struct brw_context *brw, struct brw_wm_unit_key *key,
static void upload_wm_unit( struct brw_context *brw )
{
struct intel_context *intel = &brw->intel;
struct brw_wm_unit_key key;
dri_bo *reloc_bufs[3];
struct brw_winsys_buffer *reloc_bufs[3];
wm_unit_populate_key(brw, &key);
/* Allocate the necessary scratch space if we haven't already. Don't
@ -271,7 +268,7 @@ static void upload_wm_unit( struct brw_context *brw )
GLuint total = key.total_scratch * key.max_threads;
if (brw->wm.scratch_bo && total > brw->wm.scratch_bo->size) {
dri_bo_unreference(brw->wm.scratch_bo);
brw->sws->bo_unreference(brw->wm.scratch_bo);
brw->wm.scratch_bo = NULL;
}
if (brw->wm.scratch_bo == NULL) {
@ -286,7 +283,7 @@ static void upload_wm_unit( struct brw_context *brw )
reloc_bufs[1] = brw->wm.scratch_bo;
reloc_bufs[2] = brw->wm.sampler_bo;
dri_bo_unreference(brw->wm.state_bo);
brw->sws->bo_unreference(brw->wm.state_bo);
brw->wm.state_bo = brw_search_cache(&brw->cache, BRW_WM_UNIT,
&key, sizeof(key),
reloc_bufs, 3,
@ -302,7 +299,7 @@ const struct brw_tracked_state brw_wm_unit = {
_NEW_POLYGONSTIPPLE |
_NEW_LINE |
_NEW_COLOR |
_NEW_DEPTH),
_NEW_QUERY),
.brw = (BRW_NEW_FRAGMENT_PROGRAM |
BRW_NEW_CURBE_OFFSETS |

View file

@ -30,11 +30,6 @@
*/
#include "main/mtypes.h"
#include "main/texformat.h"
#include "main/texstore.h"
#include "shader/prog_parameter.h"
#include "intel_mipmap_tree.h"
#include "intel_batchbuffer.h"
#include "intel_tex.h"
@ -70,90 +65,87 @@ static GLuint translate_tex_target( GLenum target )
}
static GLuint translate_tex_format( GLuint mesa_format, GLenum internal_format,
static GLuint translate_tex_format( GLuint mesa_format,
GLenum depth_mode )
{
switch( mesa_format ) {
case MESA_FORMAT_L8:
switch( pipe_format ) {
case PIPE_FORMAT_L8_UNORM:
return BRW_SURFACEFORMAT_L8_UNORM;
case MESA_FORMAT_I8:
case PIPE_FORMAT_I8_UNORM:
return BRW_SURFACEFORMAT_I8_UNORM;
case MESA_FORMAT_A8:
case PIPE_FORMAT_A8_UNORM:
return BRW_SURFACEFORMAT_A8_UNORM;
case MESA_FORMAT_AL88:
case PIPE_FORMAT_A8L8_UNORM:
return BRW_SURFACEFORMAT_L8A8_UNORM;
case MESA_FORMAT_RGB888:
assert(0); /* not supported for sampling */
return BRW_SURFACEFORMAT_R8G8B8_UNORM;
case PIPE_FORMAT_A8R8G8B8_UNORM:
case PIPE_FORMAT_B8G8R8A8_UNORM:
case PIPE_FORMAT_R8G8B8A8_UNORM:
return BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
case MESA_FORMAT_ARGB8888:
if (internal_format == GL_RGB)
return BRW_SURFACEFORMAT_B8G8R8X8_UNORM;
else
return BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
case PIPE_FORMAT_R8G8B8X8_UNORM:
return BRW_SURFACEFORMAT_R8G8B8X8_UNORM;
case MESA_FORMAT_RGBA8888_REV:
if (internal_format == GL_RGB)
return BRW_SURFACEFORMAT_R8G8B8X8_UNORM;
else
return BRW_SURFACEFORMAT_R8G8B8A8_UNORM;
case PIPE_FORMAT_:
return BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
case MESA_FORMAT_RGB565:
case PIPE_FORMAT_RGB565:
return BRW_SURFACEFORMAT_B5G6R5_UNORM;
case MESA_FORMAT_ARGB1555:
case PIPE_FORMAT_ARGB1555:
return BRW_SURFACEFORMAT_B5G5R5A1_UNORM;
case MESA_FORMAT_ARGB4444:
case PIPE_FORMAT_ARGB4444:
return BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
case MESA_FORMAT_YCBCR_REV:
case PIPE_FORMAT_L16_UNORM:
return BRW_SURFACEFORMAT_L16_UNORM;
case PIPE_FORMAT_I16_UNORM:
return BRW_SURFACEFORMAT_I16_UNORM;
case PIPE_FORMAT_A16_UNORM:
return BRW_SURFACEFORMAT_A16_UNORM;
case PIPE_FORMAT_YCBCR_REV:
return BRW_SURFACEFORMAT_YCRCB_NORMAL;
case MESA_FORMAT_YCBCR:
case PIPE_FORMAT_YCBCR:
return BRW_SURFACEFORMAT_YCRCB_SWAPUVY;
case MESA_FORMAT_RGB_FXT1:
case MESA_FORMAT_RGBA_FXT1:
case PIPE_FORMAT_RGB_FXT1:
case PIPE_FORMAT_RGBA_FXT1:
return BRW_SURFACEFORMAT_FXT1;
case MESA_FORMAT_Z16:
if (depth_mode == GL_INTENSITY)
return BRW_SURFACEFORMAT_I16_UNORM;
else if (depth_mode == GL_ALPHA)
return BRW_SURFACEFORMAT_A16_UNORM;
else
return BRW_SURFACEFORMAT_L16_UNORM;
case MESA_FORMAT_RGB_DXT1:
case PIPE_FORMAT_RGB_DXT1:
return BRW_SURFACEFORMAT_DXT1_RGB;
case MESA_FORMAT_RGBA_DXT1:
case PIPE_FORMAT_RGBA_DXT1:
return BRW_SURFACEFORMAT_BC1_UNORM;
case MESA_FORMAT_RGBA_DXT3:
case PIPE_FORMAT_RGBA_DXT3:
return BRW_SURFACEFORMAT_BC2_UNORM;
case MESA_FORMAT_RGBA_DXT5:
case PIPE_FORMAT_RGBA_DXT5:
return BRW_SURFACEFORMAT_BC3_UNORM;
case MESA_FORMAT_SARGB8:
case PIPE_FORMAT_R8G8B8A8_SRGB:
return BRW_SURFACEFORMAT_B8G8R8A8_UNORM_SRGB;
case MESA_FORMAT_SLA8:
case PIPE_FORMAT_A8L8_SRGB:
return BRW_SURFACEFORMAT_L8A8_UNORM_SRGB;
case MESA_FORMAT_SL8:
case PIPE_FORMAT_L8_SRGB:
return BRW_SURFACEFORMAT_L8_UNORM_SRGB;
case MESA_FORMAT_SRGB_DXT1:
case PIPE_FORMAT_SRGB_DXT1:
return BRW_SURFACEFORMAT_BC1_UNORM_SRGB;
case MESA_FORMAT_S8_Z24:
case PIPE_FORMAT_S8_Z24:
/* XXX: these different surface formats don't seem to
* make any difference for shadow sampler/compares.
*/
@ -164,10 +156,10 @@ static GLuint translate_tex_format( GLuint mesa_format, GLenum internal_format,
else
return BRW_SURFACEFORMAT_L24X8_UNORM;
case MESA_FORMAT_DUDV8:
case PIPE_FORMAT_DUDV8:
return BRW_SURFACEFORMAT_R8G8_SNORM;
case MESA_FORMAT_SIGNED_RGBA8888_REV:
case PIPE_FORMAT_SIGNED_RGBA8888_REV:
return BRW_SURFACEFORMAT_R8G8B8A8_SNORM;
default:
@ -195,12 +187,12 @@ brw_set_surface_tiling(struct brw_surface_state *surf, uint32_t tiling)
}
}
static dri_bo *
static struct brw_winsys_buffer *
brw_create_texture_surface( struct brw_context *brw,
struct brw_surface_key *key )
{
struct brw_surface_state surf;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&surf, 0, sizeof(surf));
@ -234,7 +226,7 @@ brw_create_texture_surface( struct brw_context *brw,
else
surf.ss1.base_addr = key->offset;
surf.ss2.mip_count = key->last_level - key->first_level;
surf.ss2.mip_count = key->last_level;
surf.ss2.width = key->width - 1;
surf.ss2.height = key->height - 1;
brw_set_surface_tiling(&surf, key->tiling);
@ -270,41 +262,30 @@ brw_create_texture_surface( struct brw_context *brw,
}
static void
brw_update_texture_surface( GLcontext *ctx, GLuint unit )
brw_update_texture_surface( struct brw_context *brw, GLuint unit )
{
struct brw_context *brw = brw_context(ctx);
struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
struct intel_texture_object *intelObj = intel_texture_object(tObj);
struct gl_texture_image *firstImage = tObj->Image[0][intelObj->firstLevel];
struct pipe_texture *tex = brw->texture[unit];
struct brw_surface_key key;
const GLuint surf = SURF_INDEX_TEXTURE(unit);
memset(&key, 0, sizeof(key));
if (intelObj->imageOverride) {
key.pitch = intelObj->pitchOverride / intelObj->mt->cpp;
key.depth = intelObj->depthOverride;
key.bo = NULL;
key.offset = intelObj->textureOffset;
} else {
key.format = firstImage->TexFormat->MesaFormat;
key.internal_format = firstImage->InternalFormat;
key.pitch = intelObj->mt->pitch;
key.depth = firstImage->Depth;
key.bo = intelObj->mt->region->buffer;
key.offset = 0;
}
key.format = tex->base.format;
key.pitch = tex->pitch;
key.depth = tex->base.depth[0];
key.bo = tex->buffer;
key.offset = 0;
key.target = tObj->Target;
key.depthmode = tObj->DepthMode;
key.first_level = intelObj->firstLevel;
key.last_level = intelObj->lastLevel;
key.width = firstImage->Width;
key.height = firstImage->Height;
key.cpp = intelObj->mt->cpp;
key.tiling = intelObj->mt->region->tiling;
key.target = tObj->target; /* translated to BRW enum */
/* key.depthmode = tObj->DepthMode; */ /* XXX: add this to gallium? or the state tracker? */
key.first_level = 0;
key.last_level = tex->base.last_level;
key.width = tex->base.depth[0];
key.height = tex->base.height[0];
key.cpp = tex->cpp;
key.tiling = tex->tiling;
dri_bo_unreference(brw->wm.surf_bo[surf]);
brw->sws->bo_unreference(brw->wm.surf_bo[surf]);
brw->wm.surf_bo[surf] = brw_search_cache(&brw->surface_cache,
BRW_SS_SURFACE,
&key, sizeof(key),
@ -321,13 +302,13 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
* Create the constant buffer surface. Vertex/fragment shader constants will be
* read from this buffer with Data Port Read instructions/messages.
*/
dri_bo *
struct brw_winsys_buffer *
brw_create_constant_surface( struct brw_context *brw,
struct brw_surface_key *key )
{
const GLint w = key->width - 1;
struct brw_surface_state surf;
dri_bo *bo;
struct brw_winsys_buffer *bo;
memset(&surf, 0, sizeof(surf));
@ -374,7 +355,6 @@ brw_create_constant_surface( struct brw_context *brw,
static drm_intel_bo *
brw_wm_update_constant_buffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
struct brw_fragment_program *fp =
(struct brw_fragment_program *) brw->fragment_program;
const struct gl_program_parameter_list *params = fp->program.Base.Parameters;
@ -399,7 +379,7 @@ brw_wm_update_constant_buffer(struct brw_context *brw)
* The constant buffer will be (re)allocated here if needed.
*/
static void
brw_update_wm_constant_surface( GLcontext *ctx,
brw_update_wm_constant_surface( struct brw_context *brw,
GLuint surf)
{
struct brw_context *brw = brw_context(ctx);
@ -412,7 +392,7 @@ brw_update_wm_constant_surface( GLcontext *ctx,
/* If we're in this state update atom, we need to update WM constants, so
* free the old buffer and create a new one for the new contents.
*/
dri_bo_unreference(fp->const_buffer);
brw->sws->bo_unreference(fp->const_buffer);
fp->const_buffer = brw_wm_update_constant_buffer(brw);
/* If there's no constant buffer, then no surface BO is needed to point at
@ -426,7 +406,7 @@ brw_update_wm_constant_surface( GLcontext *ctx,
memset(&key, 0, sizeof(key));
key.format = MESA_FORMAT_RGBA_FLOAT32;
key.format = PIPE_FORMAT_RGBA_FLOAT32;
key.internal_format = GL_RGBA;
key.bo = fp->const_buffer;
key.depthmode = GL_NONE;
@ -442,7 +422,7 @@ brw_update_wm_constant_surface( GLcontext *ctx,
key.width, key.height, key.depth, key.cpp, key.pitch);
*/
dri_bo_unreference(brw->wm.surf_bo[surf]);
brw->sws->bo_unreference(brw->wm.surf_bo[surf]);
brw->wm.surf_bo[surf] = brw_search_cache(&brw->surface_cache,
BRW_SS_SURFACE,
&key, sizeof(key),
@ -464,7 +444,6 @@ brw_update_wm_constant_surface( GLcontext *ctx,
*/
static void prepare_wm_constant_surface(struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
struct brw_fragment_program *fp =
(struct brw_fragment_program *) brw->fragment_program;
GLuint surf = SURF_INDEX_FRAG_CONST_BUFFER;
@ -507,8 +486,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
struct gl_renderbuffer *rb,
unsigned int unit)
{
GLcontext *ctx = &brw->intel.ctx;
dri_bo *region_bo = NULL;
struct brw_winsys_buffer *region_bo = NULL;
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
struct intel_region *region = irb ? irb->region : NULL;
struct {
@ -528,16 +506,16 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
key.surface_type = BRW_SURFACE_2D;
switch (irb->texformat->MesaFormat) {
case MESA_FORMAT_ARGB8888:
case PIPE_FORMAT_ARGB8888:
key.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM;
break;
case MESA_FORMAT_RGB565:
case PIPE_FORMAT_RGB565:
key.surface_format = BRW_SURFACEFORMAT_B5G6R5_UNORM;
break;
case MESA_FORMAT_ARGB1555:
case PIPE_FORMAT_ARGB1555:
key.surface_format = BRW_SURFACEFORMAT_B5G5R5A1_UNORM;
break;
case MESA_FORMAT_ARGB4444:
case PIPE_FORMAT_ARGB4444:
key.surface_format = BRW_SURFACEFORMAT_B4G4R4A4_UNORM;
break;
default:
@ -569,7 +547,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
key.color_blend = (!ctx->Color._LogicOpEnabled &&
ctx->Color.BlendEnabled);
dri_bo_unreference(brw->wm.surf_bo[unit]);
brw->sws->bo_unreference(brw->wm.surf_bo[unit]);
brw->wm.surf_bo[unit] = brw_search_cache(&brw->surface_cache,
BRW_SS_SURFACE,
&key, sizeof(key),
@ -646,10 +624,10 @@ brw_update_renderbuffer_surface(struct brw_context *brw,
* Constructs the binding table for the WM surface state, which maps unit
* numbers to surface state objects.
*/
static dri_bo *
static struct brw_winsys_buffer *
brw_wm_get_binding_table(struct brw_context *brw)
{
dri_bo *bind_bo;
struct brw_winsys_buffer *bind_bo;
assert(brw->wm.nr_surfaces <= BRW_WM_MAX_SURF);
@ -692,7 +670,6 @@ brw_wm_get_binding_table(struct brw_context *brw)
static void prepare_wm_surfaces(struct brw_context *brw )
{
GLcontext *ctx = &brw->intel.ctx;
GLuint i;
int old_nr_surfaces;
@ -724,12 +701,12 @@ static void prepare_wm_surfaces(struct brw_context *brw )
brw_update_texture_surface(ctx, i);
brw->wm.nr_surfaces = surf + 1;
} else {
dri_bo_unreference(brw->wm.surf_bo[surf]);
brw->sws->bo_unreference(brw->wm.surf_bo[surf]);
brw->wm.surf_bo[surf] = NULL;
}
}
dri_bo_unreference(brw->wm.bind_bo);
brw->sws->bo_unreference(brw->wm.bind_bo);
brw->wm.bind_bo = brw_wm_get_binding_table(brw);
if (brw->wm.nr_surfaces != old_nr_surfaces)

View file

@ -1,9 +1,6 @@
#ifndef INTEL_BATCHBUFFER_H
#define INTEL_BATCHBUFFER_H
#include "main/mtypes.h"
#include "intel_context.h"
#include "intel_bufmgr.h"
#include "intel_reg.h"
@ -44,7 +41,7 @@ struct intel_batchbuffer
{
struct intel_context *intel;
dri_bo *buf;
struct brw_winsys_buffer *buf;
GLubyte *buffer;
@ -89,7 +86,7 @@ void intel_batchbuffer_release_space(struct intel_batchbuffer *batch,
GLuint bytes);
GLboolean intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch,
dri_bo *buffer,
struct brw_winsys_buffer *buffer,
uint32_t read_domains,
uint32_t write_domain,
uint32_t offset);

View file

@ -1,206 +1,9 @@
#include "intel_context.h"
#include "intel_tex.h"
#include "intel_chipset.h"
#include "main/texformat.h"
#include "main/enums.h"
/**
* Choose hardware texture format given the user's glTexImage parameters.
*
* It works out that this function is fine for all the supported
* hardware. However, there is still a need to map the formats onto
* hardware descriptors.
*
* Note that the i915 can actually support many more formats than
* these if we take the step of simply swizzling the colors
* immediately after sampling...
*/
const struct gl_texture_format *
intelChooseTextureFormat(GLcontext * ctx, GLint internalFormat,
GLenum format, GLenum type)
{
struct intel_context *intel = intel_context(ctx);
const GLboolean do32bpt = (intel->ctx.Visual.rgbBits >= 24);
#if 0
printf("%s intFmt=0x%x format=0x%x type=0x%x\n",
__FUNCTION__, internalFormat, format, type);
#endif
switch (internalFormat) {
case 4:
case GL_RGBA:
case GL_COMPRESSED_RGBA:
if (format == GL_BGRA) {
if (type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_INT_8_8_8_8_REV) {
return &_mesa_texformat_argb8888;
}
else if (type == GL_UNSIGNED_SHORT_4_4_4_4_REV) {
return &_mesa_texformat_argb4444;
}
else if (type == GL_UNSIGNED_SHORT_1_5_5_5_REV) {
return &_mesa_texformat_argb1555;
}
}
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
case 3:
case GL_RGB:
case GL_COMPRESSED_RGB:
if (format == GL_RGB && type == GL_UNSIGNED_SHORT_5_6_5) {
return &_mesa_texformat_rgb565;
}
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
case GL_RGBA8:
case GL_RGB10_A2:
case GL_RGBA12:
case GL_RGBA16:
return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
case GL_RGBA4:
case GL_RGBA2:
return &_mesa_texformat_argb4444;
case GL_RGB5_A1:
return &_mesa_texformat_argb1555;
case GL_RGB8:
case GL_RGB10:
case GL_RGB12:
case GL_RGB16:
return &_mesa_texformat_argb8888;
case GL_RGB5:
case GL_RGB4:
case GL_R3_G3_B2:
return &_mesa_texformat_rgb565;
case GL_ALPHA:
case GL_ALPHA4:
case GL_ALPHA8:
case GL_ALPHA12:
case GL_ALPHA16:
case GL_COMPRESSED_ALPHA:
return &_mesa_texformat_a8;
case 1:
case GL_LUMINANCE:
case GL_LUMINANCE4:
case GL_LUMINANCE8:
case GL_LUMINANCE12:
case GL_LUMINANCE16:
case GL_COMPRESSED_LUMINANCE:
return &_mesa_texformat_l8;
case 2:
case GL_LUMINANCE_ALPHA:
case GL_LUMINANCE4_ALPHA4:
case GL_LUMINANCE6_ALPHA2:
case GL_LUMINANCE8_ALPHA8:
case GL_LUMINANCE12_ALPHA4:
case GL_LUMINANCE12_ALPHA12:
case GL_LUMINANCE16_ALPHA16:
case GL_COMPRESSED_LUMINANCE_ALPHA:
return &_mesa_texformat_al88;
case GL_INTENSITY:
case GL_INTENSITY4:
case GL_INTENSITY8:
case GL_INTENSITY12:
case GL_INTENSITY16:
case GL_COMPRESSED_INTENSITY:
return &_mesa_texformat_i8;
case GL_YCBCR_MESA:
if (type == GL_UNSIGNED_SHORT_8_8_MESA || type == GL_UNSIGNED_BYTE)
return &_mesa_texformat_ycbcr;
else
return &_mesa_texformat_ycbcr_rev;
case GL_COMPRESSED_RGB_FXT1_3DFX:
return &_mesa_texformat_rgb_fxt1;
case GL_COMPRESSED_RGBA_FXT1_3DFX:
return &_mesa_texformat_rgba_fxt1;
case GL_RGB_S3TC:
case GL_RGB4_S3TC:
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
return &_mesa_texformat_rgb_dxt1;
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
return &_mesa_texformat_rgba_dxt1;
case GL_RGBA_S3TC:
case GL_RGBA4_S3TC:
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
return &_mesa_texformat_rgba_dxt3;
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
return &_mesa_texformat_rgba_dxt5;
case GL_DEPTH_COMPONENT:
case GL_DEPTH_COMPONENT16:
case GL_DEPTH_COMPONENT24:
case GL_DEPTH_COMPONENT32:
#if 0
return &_mesa_texformat_z16;
#else
/* fall-through.
* 16bpp depth texture can't be paired with a stencil buffer so
* always used combined depth/stencil format.
*/
#endif
case GL_DEPTH_STENCIL_EXT:
case GL_DEPTH24_STENCIL8_EXT:
return &_mesa_texformat_s8_z24;
#ifndef I915
case GL_SRGB_EXT:
case GL_SRGB8_EXT:
case GL_SRGB_ALPHA_EXT:
case GL_SRGB8_ALPHA8_EXT:
case GL_COMPRESSED_SRGB_EXT:
case GL_COMPRESSED_SRGB_ALPHA_EXT:
case GL_COMPRESSED_SLUMINANCE_EXT:
case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT:
return &_mesa_texformat_sargb8;
case GL_SLUMINANCE_EXT:
case GL_SLUMINANCE8_EXT:
if (IS_G4X(intel->intelScreen->deviceID))
return &_mesa_texformat_sl8;
else
return &_mesa_texformat_sargb8;
case GL_SLUMINANCE_ALPHA_EXT:
case GL_SLUMINANCE8_ALPHA8_EXT:
if (IS_G4X(intel->intelScreen->deviceID))
return &_mesa_texformat_sla8;
else
return &_mesa_texformat_sargb8;
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return &_mesa_texformat_srgb_dxt1;
/* i915 could also do this */
case GL_DUDV_ATI:
case GL_DU8DV8_ATI:
return &_mesa_texformat_dudv8;
case GL_RGBA_SNORM:
case GL_RGBA8_SNORM:
return &_mesa_texformat_signed_rgba8888_rev;
#endif
default:
fprintf(stderr, "unexpected texture format %s in %s\n",
_mesa_lookup_enum_by_nr(internalFormat), __FUNCTION__);
return NULL;
}
return NULL; /* never get here */
}
int intel_compressed_num_bytes(GLuint mesaFormat)
{

View file

@ -33,7 +33,6 @@
#include "intel_mipmap_tree.h"
#include "intel_tex_layout.h"
#include "intel_context.h"
#include "main/macros.h"
void intel_get_texture_alignment_unit(GLenum internalFormat, GLuint *w, GLuint *h)
{
@ -86,7 +85,7 @@ void i945_miptree_layout_2d( struct intel_context *intel,
* constraints of mipmap placement push the right edge of the
* 2nd mipmap out past the width of its parent.
*/
if (mt->first_level != mt->last_level) {
if (mt->last_level) {
GLuint mip1_width;
if (mt->compressed) {
@ -108,7 +107,7 @@ void i945_miptree_layout_2d( struct intel_context *intel,
mt->pitch = intel_miptree_pitch_align (intel, mt, tiling, mt->pitch);
mt->total_height = 0;
for ( level = mt->first_level ; level <= mt->last_level ; level++ ) {
for ( level = 0 ; level <= mt->last_level ; level++ ) {
GLuint img_height;
intel_miptree_set_level_info(mt, level, 1, x, y, width,
@ -127,7 +126,7 @@ void i945_miptree_layout_2d( struct intel_context *intel,
/* Layout_below: step right after second mipmap.
*/
if (level == mt->first_level + 1) {
if (level == 1) {
x += ALIGN(width, align_w);
}
else {