cell: dump generated code if CELL_DEBUG=asm
This commit is contained in:
@@ -45,7 +45,7 @@ static GLint uTexture;
|
|||||||
|
|
||||||
static GLuint SphereList, RectList, CurList;
|
static GLuint SphereList, RectList, CurList;
|
||||||
static GLint win = 0;
|
static GLint win = 0;
|
||||||
static GLboolean anim = GL_TRUE;
|
static GLboolean anim = 0*GL_TRUE;
|
||||||
static GLboolean wire = GL_FALSE;
|
static GLboolean wire = GL_FALSE;
|
||||||
static GLboolean pixelLight = GL_TRUE;
|
static GLboolean pixelLight = GL_TRUE;
|
||||||
|
|
||||||
|
@@ -900,6 +900,14 @@ cell_gen_fragment_function(struct cell_context *cell, struct spe_function *f)
|
|||||||
int fbRGBA_reg; /**< framebuffer's RGBA colors for quad */
|
int fbRGBA_reg; /**< framebuffer's RGBA colors for quad */
|
||||||
int fbZS_reg; /**< framebuffer's combined z/stencil values for quad */
|
int fbZS_reg; /**< framebuffer's combined z/stencil values for quad */
|
||||||
|
|
||||||
|
spe_init_func(f, SPU_MAX_FRAGMENT_OPS_INSTS * SPE_INST_SIZE);
|
||||||
|
|
||||||
|
if (cell->debug_flags & CELL_DEBUG_ASM) {
|
||||||
|
spe_print_code(f, true);
|
||||||
|
spe_indent(f, 8);
|
||||||
|
spe_comment(f, -4, "Begin per-fragment ops");
|
||||||
|
}
|
||||||
|
|
||||||
spe_allocate_register(f, x_reg);
|
spe_allocate_register(f, x_reg);
|
||||||
spe_allocate_register(f, y_reg);
|
spe_allocate_register(f, y_reg);
|
||||||
spe_allocate_register(f, color_tile_reg);
|
spe_allocate_register(f, color_tile_reg);
|
||||||
@@ -1114,5 +1122,8 @@ cell_gen_fragment_function(struct cell_context *cell, struct spe_function *f)
|
|||||||
spe_release_register(f, fbRGBA_reg);
|
spe_release_register(f, fbRGBA_reg);
|
||||||
spe_release_register(f, fbZS_reg);
|
spe_release_register(f, fbZS_reg);
|
||||||
spe_release_register(f, quad_offset_reg);
|
spe_release_register(f, quad_offset_reg);
|
||||||
}
|
|
||||||
|
|
||||||
|
if (cell->debug_flags & CELL_DEBUG_ASM) {
|
||||||
|
spe_comment(f, -4, "End per-fragment ops");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -58,9 +58,9 @@ cell_get_param(struct pipe_screen *screen, int param)
|
|||||||
case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
|
case PIPE_CAP_MAX_TEXTURE_IMAGE_UNITS:
|
||||||
return CELL_MAX_SAMPLERS;
|
return CELL_MAX_SAMPLERS;
|
||||||
case PIPE_CAP_NPOT_TEXTURES:
|
case PIPE_CAP_NPOT_TEXTURES:
|
||||||
return 0;
|
return 1;
|
||||||
case PIPE_CAP_TWO_SIDED_STENCIL:
|
case PIPE_CAP_TWO_SIDED_STENCIL:
|
||||||
return 0;
|
return 1;
|
||||||
case PIPE_CAP_GLSL:
|
case PIPE_CAP_GLSL:
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_S3TC:
|
case PIPE_CAP_S3TC:
|
||||||
@@ -68,13 +68,13 @@ cell_get_param(struct pipe_screen *screen, int param)
|
|||||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_POINT_SPRITE:
|
case PIPE_CAP_POINT_SPRITE:
|
||||||
return 0;
|
return 1;
|
||||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||||
return 1;
|
return 1;
|
||||||
case PIPE_CAP_OCCLUSION_QUERY:
|
case PIPE_CAP_OCCLUSION_QUERY:
|
||||||
return 0;
|
return 1;
|
||||||
case PIPE_CAP_TEXTURE_SHADOW_MAP:
|
case PIPE_CAP_TEXTURE_SHADOW_MAP:
|
||||||
return 0;
|
return 10;
|
||||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
||||||
return 12; /* max 2Kx2K */
|
return 12; /* max 2Kx2K */
|
||||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||||
@@ -82,7 +82,7 @@ cell_get_param(struct pipe_screen *screen, int param)
|
|||||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||||
return 12; /* max 2Kx2K */
|
return 12; /* max 2Kx2K */
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ cell_get_paramf(struct pipe_screen *screen, int param)
|
|||||||
return 16.0; /* arbitrary */
|
return 16.0; /* arbitrary */
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -39,11 +39,20 @@
|
|||||||
#include "tgsi/tgsi_exec.h"
|
#include "tgsi/tgsi_exec.h"
|
||||||
#include "tgsi/tgsi_parse.h"
|
#include "tgsi/tgsi_parse.h"
|
||||||
|
|
||||||
struct sp_exec_fragment_shader {
|
struct sp_exec_fragment_shader
|
||||||
|
{
|
||||||
struct sp_fragment_shader base;
|
struct sp_fragment_shader base;
|
||||||
|
struct tgsi_token *machine_tokens;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** cast wrapper */
|
||||||
|
static INLINE struct sp_exec_fragment_shader *
|
||||||
|
sp_exec_fragment_shader(struct sp_fragment_shader *base)
|
||||||
|
{
|
||||||
|
return (struct sp_exec_fragment_shader *) base;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute quad X,Y,Z,W for the four fragments in a quad.
|
* Compute quad X,Y,Z,W for the four fragments in a quad.
|
||||||
@@ -86,10 +95,20 @@ exec_prepare( const struct sp_fragment_shader *base,
|
|||||||
struct tgsi_exec_machine *machine,
|
struct tgsi_exec_machine *machine,
|
||||||
struct tgsi_sampler *samplers )
|
struct tgsi_sampler *samplers )
|
||||||
{
|
{
|
||||||
|
struct sp_exec_fragment_shader *spefs =
|
||||||
|
sp_exec_fragment_shader(base);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bind tokens/shader to the interpreter's machine state.
|
||||||
|
* Avoid redundant binding.
|
||||||
|
*/
|
||||||
|
if (spefs->machine_tokens != base->shader.tokens) {
|
||||||
tgsi_exec_machine_bind_shader( machine,
|
tgsi_exec_machine_bind_shader( machine,
|
||||||
base->shader.tokens,
|
base->shader.tokens,
|
||||||
PIPE_MAX_SAMPLERS,
|
PIPE_MAX_SAMPLERS,
|
||||||
samplers );
|
samplers );
|
||||||
|
spefs->machine_tokens = base->shader.tokens;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user