From dae719a68173bddedbb531c030cd4a12bcb0435b Mon Sep 17 00:00:00 2001 From: Brian Date: Sat, 12 Jan 2008 12:39:26 -0700 Subject: Cell: first state object (depth/stencil/alpha) emitted to SPUs --- src/mesa/pipe/cell/common.h | 1 + src/mesa/pipe/cell/ppu/Makefile | 1 + src/mesa/pipe/cell/ppu/cell_batch.c | 1 + src/mesa/pipe/cell/ppu/cell_state_blend.c | 1 + src/mesa/pipe/cell/ppu/cell_state_derived.c | 2 ++ src/mesa/pipe/cell/ppu/cell_state_emit.c | 45 +++++++++++++++++++++++++++++ src/mesa/pipe/cell/ppu/cell_state_emit.h | 36 +++++++++++++++++++++++ src/mesa/pipe/cell/spu/spu_main.c | 20 ++++++++++++- 8 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/mesa/pipe/cell/ppu/cell_state_emit.c create mode 100644 src/mesa/pipe/cell/ppu/cell_state_emit.h diff --git a/src/mesa/pipe/cell/common.h b/src/mesa/pipe/cell/common.h index 3d6f1c4ba0..74b3d3cbee 100644 --- a/src/mesa/pipe/cell/common.h +++ b/src/mesa/pipe/cell/common.h @@ -59,6 +59,7 @@ #define CELL_CMD_FINISH 4 #define CELL_CMD_RENDER 5 #define CELL_CMD_BATCH 6 +#define CELL_CMD_STATE_DEPTH_STENCIL 7 #define CELL_NUM_BATCH_BUFFERS 2 diff --git a/src/mesa/pipe/cell/ppu/Makefile b/src/mesa/pipe/cell/ppu/Makefile index f7e3dd09f4..6a1bd5982f 100644 --- a/src/mesa/pipe/cell/ppu/Makefile +++ b/src/mesa/pipe/cell/ppu/Makefile @@ -23,6 +23,7 @@ SOURCES = \ cell_state_blend.c \ cell_state_clip.c \ cell_state_derived.c \ + cell_state_emit.c \ cell_state_fs.c \ cell_state_rasterizer.c \ cell_state_sampler.c \ diff --git a/src/mesa/pipe/cell/ppu/cell_batch.c b/src/mesa/pipe/cell/ppu/cell_batch.c index 7eb1b50ddb..45d49d0465 100644 --- a/src/mesa/pipe/cell/ppu/cell_batch.c +++ b/src/mesa/pipe/cell/ppu/cell_batch.c @@ -68,6 +68,7 @@ cell_batch_append(struct cell_context *cell, const void *cmd, uint length) { uint size; + assert(length % 4 == 0); assert(cell->cur_batch >= 0); size = cell->batch_buffer_size[cell->cur_batch]; diff --git a/src/mesa/pipe/cell/ppu/cell_state_blend.c b/src/mesa/pipe/cell/ppu/cell_state_blend.c index 4e49655820..34ae0128ea 100644 --- a/src/mesa/pipe/cell/ppu/cell_state_blend.c +++ b/src/mesa/pipe/cell/ppu/cell_state_blend.c @@ -33,6 +33,7 @@ #include "cell_state.h" + void * cell_create_blend_state(struct pipe_context *pipe, const struct pipe_blend_state *blend) diff --git a/src/mesa/pipe/cell/ppu/cell_state_derived.c b/src/mesa/pipe/cell/ppu/cell_state_derived.c index ec3a8f3a81..dc2879b915 100644 --- a/src/mesa/pipe/cell/ppu/cell_state_derived.c +++ b/src/mesa/pipe/cell/ppu/cell_state_derived.c @@ -219,5 +219,7 @@ void cell_update_derived( struct cell_context *cell ) compute_cliprect(cell); #endif + cell_emit_state(cell); + cell->dirty = 0; } diff --git a/src/mesa/pipe/cell/ppu/cell_state_emit.c b/src/mesa/pipe/cell/ppu/cell_state_emit.c new file mode 100644 index 0000000000..e1a1458f39 --- /dev/null +++ b/src/mesa/pipe/cell/ppu/cell_state_emit.c @@ -0,0 +1,45 @@ +/************************************************************************** + * + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS 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. + * + **************************************************************************/ + +#include "pipe/p_util.h" +#include "cell_context.h" +#include "cell_state.h" +#include "cell_state_emit.h" +#include "cell_batch.h" + + + +void +cell_emit_state(struct cell_context *cell) +{ + if (cell->dirty & CELL_NEW_DEPTH_STENCIL) { + uint cmd = CELL_CMD_STATE_DEPTH_STENCIL; + cell_batch_append(cell, &cmd, 4); + cell_batch_append(cell, cell->depth_stencil, + sizeof(struct pipe_depth_stencil_alpha_state)); + } +} diff --git a/src/mesa/pipe/cell/ppu/cell_state_emit.h b/src/mesa/pipe/cell/ppu/cell_state_emit.h new file mode 100644 index 0000000000..59f8affe8d --- /dev/null +++ b/src/mesa/pipe/cell/ppu/cell_state_emit.h @@ -0,0 +1,36 @@ +/************************************************************************** + * + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL TUNGSTEN GRAPHICS 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. + * + **************************************************************************/ + +#ifndef CELL_STATE_EMIT_H +#define CELL_STATE_EMIT_H + + +extern void +cell_emit_state(struct cell_context *cell); + + +#endif /* CELL_STATE_EMIT_H */ diff --git a/src/mesa/pipe/cell/spu/spu_main.c b/src/mesa/pipe/cell/spu/spu_main.c index df708e65d1..f9d7302c36 100644 --- a/src/mesa/pipe/cell/spu/spu_main.c +++ b/src/mesa/pipe/cell/spu/spu_main.c @@ -38,6 +38,8 @@ #include "spu_tile.h" #include "pipe/cell/common.h" #include "pipe/p_defines.h" +#include "pipe/p_state.h" + /* helpful headers: @@ -45,7 +47,7 @@ helpful headers: /opt/ibm/cell-sdk/prototype/sysroot/usr/include/libmisc.h */ -static boolean Debug = FALSE; +static boolean Debug = TRUE; volatile struct cell_init_info init; @@ -356,6 +358,17 @@ cmd_framebuffer(const struct cell_command_framebuffer *cmd) } +static void +cmd_state_depth_stencil(const struct pipe_depth_stencil_alpha_state *state) +{ + if (Debug) + printf("SPU %u: DEPTH_STENCIL: ztest %d\n", + init.id, + state->depth.enabled); + /* XXX copy/save the state */ +} + + static void cmd_finish(void) { @@ -431,6 +444,11 @@ cmd_batch(uint opcode) cmd_finish(); pos += 1; break; + case CELL_CMD_STATE_DEPTH_STENCIL: + cmd_state_depth_stencil((struct pipe_depth_stencil_alpha_state *) + &buffer[pos+1]); + pos += (1 + sizeof(struct pipe_depth_stencil_alpha_state) / 4); + break; default: printf("SPU %u: bad opcode: 0x%x\n", init.id, buffer[pos]); ASSERT(0); -- cgit v1.2.3