mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-21 09:50:36 +02:00
cell: asst. clean-up
This commit is contained in:
parent
283ffdf996
commit
aa4a08d429
3 changed files with 32 additions and 48 deletions
|
|
@ -231,13 +231,13 @@ cmd_state_fragment_ops(const struct cell_command_fragment_ops *fops)
|
|||
if (Debug)
|
||||
printf("SPU %u: CMD_STATE_FRAGMENT_OPS\n", spu.init.id);
|
||||
/* Copy SPU code from batch buffer to spu buffer */
|
||||
memcpy(spu.fragment_ops.code, fops->code, SPU_MAX_FRAGMENT_OPS_INSTS * 4);
|
||||
memcpy(spu.fragment_ops_code, fops->code, SPU_MAX_FRAGMENT_OPS_INSTS * 4);
|
||||
/* Copy state info */
|
||||
memcpy(&spu.depth_stencil_alpha, &fops->dsa, sizeof(fops->dsa));
|
||||
memcpy(&spu.blend, &fops->blend, sizeof(fops->blend));
|
||||
|
||||
/* Point function pointer at new code */
|
||||
spu.fragment_ops.func = (spu_fragment_ops_func) spu.fragment_ops.code;
|
||||
spu.fragment_ops = (spu_fragment_ops_func) spu.fragment_ops_code;
|
||||
|
||||
spu.read_depth = spu.depth_stencil_alpha.depth.enabled;
|
||||
spu.read_stencil = spu.depth_stencil_alpha.stencil[0].enabled;
|
||||
|
|
@ -288,17 +288,6 @@ cmd_state_framebuffer(const struct cell_command_framebuffer *cmd)
|
|||
spu.fb.zsize = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (spu.fb.color_format == PIPE_FORMAT_A8R8G8B8_UNORM)
|
||||
spu.color_shuffle = ((vector unsigned char) {
|
||||
12, 0, 4, 8, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0});
|
||||
else if (spu.fb.color_format == PIPE_FORMAT_B8G8R8A8_UNORM)
|
||||
spu.color_shuffle = ((vector unsigned char) {
|
||||
8, 4, 0, 12, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0});
|
||||
else
|
||||
ASSERT(0);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -521,11 +510,11 @@ cmd_batch(uint opcode)
|
|||
pos += (1 + ROUNDUP8(sizeof(struct cell_array_info)) / 8);
|
||||
break;
|
||||
case CELL_CMD_STATE_BIND_VS:
|
||||
#if 01
|
||||
#if 0
|
||||
spu_bind_vertex_shader(&draw,
|
||||
(struct cell_shader_info *) &buffer[pos+1]);
|
||||
pos += (1 + ROUNDUP8(sizeof(struct cell_shader_info)) / 8);
|
||||
#endif
|
||||
pos += (1 + ROUNDUP8(sizeof(struct cell_shader_info)) / 8);
|
||||
break;
|
||||
case CELL_CMD_STATE_ATTRIB_FETCH:
|
||||
cmd_state_attrib_fetch((struct cell_attribute_fetch_code *)
|
||||
|
|
@ -600,7 +589,7 @@ main_loop(void)
|
|||
exitFlag = 1;
|
||||
break;
|
||||
case CELL_CMD_VS_EXECUTE:
|
||||
#if 01
|
||||
#if 0
|
||||
spu_execute_vertex_shader(&draw, &cmd.vs);
|
||||
#endif
|
||||
break;
|
||||
|
|
@ -631,7 +620,7 @@ one_time_init(void)
|
|||
/* Install default/fallback fragment processing function.
|
||||
* This will normally be overriden by a code-gen'd function.
|
||||
*/
|
||||
spu.fragment_ops.func = spu_fallback_fragment_ops;
|
||||
spu.fragment_ops = spu_fallback_fragment_ops;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -60,9 +60,11 @@ typedef union {
|
|||
#define TILE_STATUS_GETTING 5 /**< mfc_get() called but not yet arrived */
|
||||
|
||||
|
||||
typedef vector float (*sample_texture_func)(uint unit, vector float texcoord);
|
||||
|
||||
/** Function for sampling textures */
|
||||
typedef vector float (*spu_sample_texture_func)(uint unit,
|
||||
vector float texcoord);
|
||||
|
||||
/** Function for performing per-fragment ops */
|
||||
typedef void (*spu_fragment_ops_func)(uint x, uint y,
|
||||
tile_t *colorTile,
|
||||
tile_t *depthStencilTile,
|
||||
|
|
@ -73,14 +75,8 @@ typedef void (*spu_fragment_ops_func)(uint x, uint y,
|
|||
vector float fragAlpha,
|
||||
vector unsigned int mask);
|
||||
|
||||
struct spu_fragment_ops
|
||||
struct spu_framebuffer
|
||||
{
|
||||
uint code[SPU_MAX_FRAGMENT_OPS_INSTS];
|
||||
spu_fragment_ops_func func; /**< Current fragment ops function */
|
||||
} ALIGN16_ATTRIB;
|
||||
|
||||
|
||||
struct spu_framebuffer {
|
||||
void *color_start; /**< addr of color surface in main memory */
|
||||
void *depth_start; /**< addr of depth surface in main memory */
|
||||
enum pipe_format color_format;
|
||||
|
|
@ -109,34 +105,31 @@ struct spu_texture
|
|||
|
||||
|
||||
/**
|
||||
* All SPU global/context state will be in singleton object of this type:
|
||||
* All SPU global/context state will be in a singleton object of this type:
|
||||
*/
|
||||
struct spu_global
|
||||
{
|
||||
/** One-time init/constant info */
|
||||
struct cell_init_info init;
|
||||
|
||||
/*
|
||||
* Current state
|
||||
*/
|
||||
struct spu_framebuffer fb;
|
||||
|
||||
struct pipe_depth_stencil_alpha_state depth_stencil_alpha;
|
||||
struct pipe_blend_state blend;
|
||||
|
||||
boolean read_depth;
|
||||
boolean read_stencil;
|
||||
|
||||
struct pipe_sampler_state sampler[PIPE_MAX_SAMPLERS];
|
||||
struct spu_texture texture[PIPE_MAX_SAMPLERS];
|
||||
|
||||
struct vertex_info vertex_info;
|
||||
|
||||
struct spu_fragment_ops fragment_ops;
|
||||
|
||||
/* XXX more state to come */
|
||||
|
||||
|
||||
/** current color and Z tiles */
|
||||
/** Current color and Z tiles */
|
||||
tile_t ctile ALIGN16_ATTRIB;
|
||||
tile_t ztile ALIGN16_ATTRIB;
|
||||
|
||||
/** Read depth/stencil tiles? */
|
||||
boolean read_depth;
|
||||
boolean read_stencil;
|
||||
|
||||
/** Current tiles' status */
|
||||
ubyte cur_ctile_status, cur_ztile_status;
|
||||
|
||||
|
|
@ -144,11 +137,13 @@ struct spu_global
|
|||
ubyte ctile_status[MAX_HEIGHT/TILE_SIZE][MAX_WIDTH/TILE_SIZE] ALIGN16_ATTRIB;
|
||||
ubyte ztile_status[MAX_HEIGHT/TILE_SIZE][MAX_WIDTH/TILE_SIZE] ALIGN16_ATTRIB;
|
||||
|
||||
/** Current fragment ops machine code */
|
||||
uint fragment_ops_code[SPU_MAX_FRAGMENT_OPS_INSTS];
|
||||
/** Current fragment ops function */
|
||||
spu_fragment_ops_func fragment_ops;
|
||||
|
||||
/** for converting RGBA to PIPE_FORMAT_x colors */
|
||||
vector unsigned char color_shuffle;
|
||||
|
||||
sample_texture_func sample_texture[CELL_MAX_SAMPLERS];
|
||||
/** Current texture sampler function */
|
||||
spu_sample_texture_func sample_texture[CELL_MAX_SAMPLERS];
|
||||
|
||||
} ALIGN16_ATTRIB;
|
||||
|
||||
|
|
|
|||
|
|
@ -333,11 +333,11 @@ emit_quad( int x, int y, mask_t mask )
|
|||
/* Do all per-fragment/quad operations here, including:
|
||||
* alpha test, z test, stencil test, blend and framebuffer writing.
|
||||
*/
|
||||
spu.fragment_ops.func(ix, iy, &spu.ctile, &spu.ztile,
|
||||
fragZ.v,
|
||||
soa_frag[0], soa_frag[1],
|
||||
soa_frag[2], soa_frag[3],
|
||||
mask);
|
||||
spu.fragment_ops(ix, iy, &spu.ctile, &spu.ztile,
|
||||
fragZ.v,
|
||||
soa_frag[0], soa_frag[1],
|
||||
soa_frag[2], soa_frag[3],
|
||||
mask);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue