Procházet zdrojové kódy

cell: update clear() code to catch up to gallium changes

tags/mesa_7_5_rc1
Brian Paul před 16 roky
rodič
revize
7a164411ab

+ 22
- 34
src/gallium/drivers/cell/ppu/cell_clear.c Zobrazit soubor

@@ -45,54 +45,42 @@
#include "cell_state.h"


/**
* Convert packed pixel from one format to another.
*/
static unsigned
convert_color(enum pipe_format srcFormat, unsigned srcColor,
enum pipe_format dstFormat)
{
ubyte r, g, b, a;
unsigned dstColor;

util_unpack_color_ub(srcFormat, &srcColor, &r, &g, &b, &a);
util_pack_color_ub(r, g, b, a, dstFormat, &dstColor);

return dstColor;
}



/**
* Called via pipe->clear()
*/
void
cell_clear_surface(struct pipe_context *pipe, struct pipe_surface *ps,
unsigned clearValue)
cell_clear(struct pipe_context *pipe, unsigned buffers, const float *rgba,
double depth, unsigned stencil)
{
struct cell_context *cell = cell_context(pipe);
uint surfIndex;

if (cell->dirty)
cell_update_derived(cell);

if (ps == cell->framebuffer.zsbuf) {
/* clear z/stencil buffer */
surfIndex = 1;
}
else {
/* clear color buffer */
surfIndex = 0;
if (buffers & PIPE_CLEAR_COLOR) {
uint surfIndex = 0;
uint clearValue;

if (ps->format != PIPE_FORMAT_A8R8G8B8_UNORM) {
clearValue = convert_color(PIPE_FORMAT_A8R8G8B8_UNORM, clearValue,
ps->format);
}
util_pack_color(rgba, cell->framebuffer.cbufs[0]->format, &clearValue);

/* Build a CLEAR command and place it in the current batch buffer */
STATIC_ASSERT(sizeof(struct cell_command_clear_surface) % 16 == 0);
struct cell_command_clear_surface *clr
= (struct cell_command_clear_surface *)
cell_batch_alloc16(cell, sizeof(*clr));
clr->opcode[0] = CELL_CMD_CLEAR_SURFACE;
clr->surface = surfIndex;
clr->value = clearValue;
}

if (buffers & PIPE_CLEAR_DEPTHSTENCIL) {
uint surfIndex = 1;
uint clearValue;

clearValue = util_pack_z_stencil(cell->framebuffer.zsbuf->format,
depth, stencil);

/* Build a CLEAR command and place it in the current batch buffer */
{
/* Build a CLEAR command and place it in the current batch buffer */
STATIC_ASSERT(sizeof(struct cell_command_clear_surface) % 16 == 0);
struct cell_command_clear_surface *clr
= (struct cell_command_clear_surface *)

+ 2
- 4
src/gallium/drivers/cell/ppu/cell_clear.h Zobrazit soubor

@@ -31,13 +31,11 @@


struct pipe_context;
struct pipe_surface;


extern void
cell_clear_surface(struct pipe_context *pipe, struct pipe_surface *ps,
unsigned clearValue);

cell_clear(struct pipe_context *pipe, unsigned buffers, const float *rgba,
double depth, unsigned stencil);


#endif /* CELL_CLEAR_H */

+ 1
- 1
src/gallium/drivers/cell/ppu/cell_context.c Zobrazit soubor

@@ -119,7 +119,7 @@ cell_create_context(struct pipe_screen *screen,
cell->pipe.screen = screen;
cell->pipe.destroy = cell_destroy_context;

cell->pipe.clear = cell_clear_surface;
cell->pipe.clear = cell_clear;
cell->pipe.flush = cell_flush;

#if 0

Načítá se…
Zrušit
Uložit