st/vega: Clean up vg_context fields and functions.

This commit is contained in:
Chia-I Wu
2010-11-28 03:39:18 +08:00
parent 635fe3e192
commit ace4539e88
4 changed files with 9 additions and 163 deletions

View File

@@ -27,16 +27,6 @@
#ifndef ASM_UTIL_H
#define ASM_UTIL_H
static const char pass_through_depth_asm[] =
"FRAG\n"
"DCL IN[0], POSITION, LINEAR\n"
"DCL OUT[0].z, POSITION, CONSTANT\n"
"0: MOV OUT[0].z, IN[0].zzzz\n"
"1: END\n";
/* μnew = μmask */
static const char set_mask_asm[] =
"FRAG\n"
@@ -92,45 +82,4 @@ static const char subtract_mask_asm[] =
"3: MUL OUT[0], TEMP[2].wwww, TEMP[0].wwww\n"
"4: END\n";
static const char vs_plain_asm[] =
"VERT\n"
"DCL IN[0]\n"
"DCL OUT[0], POSITION\n"
"DCL TEMP[0]\n"
"DCL CONST[0..1]\n"
"0: MUL TEMP[0], IN[0], CONST[0]\n"
"1: ADD TEMP[0], TEMP[0], CONST[1]\n"
"2: MOV OUT[0], TEMP[0]\n"
"3: END\n";
static const char vs_clear_asm[] =
"VERT\n"
"DCL IN[0]\n"
"DCL IN[1]\n"
"DCL OUT[0], POSITION\n"
"DCL OUT[1], COLOR\n"
"DCL TEMP[0]\n"
"DCL CONST[0..1]\n"
"0: MUL TEMP[0], IN[0], CONST[0]\n"
"1: ADD TEMP[0], TEMP[0], CONST[1]\n"
"2: MOV OUT[0], TEMP[0]\n"
"3: MOV OUT[1], IN[1]\n"
"4: END\n";
static const char vs_texture_asm[] =
"VERT\n"
"DCL IN[0]\n"
"DCL IN[1]\n"
"DCL OUT[0], POSITION\n"
"DCL OUT[1], GENERIC\n"
"DCL TEMP[0]\n"
"DCL CONST[0..1]\n"
"0: MUL TEMP[0], IN[0], CONST[0]\n"
"1: ADD TEMP[0], TEMP[0], CONST[1]\n"
"2: MOV OUT[0], TEMP[0]\n"
"3: MOV OUT[1], IN[1]\n"
"4: END\n";
#endif

View File

@@ -89,6 +89,7 @@ struct renderer {
struct pipe_resource *vs_const_buffer;
struct pipe_vertex_element velems[2];
VGfloat vertices[4][2][4];
void *cached_vs[NUM_RENDERER_VS];
@@ -489,7 +490,7 @@ static void renderer_quad_draw(struct renderer *r)
sizeof(r->vertices),
PIPE_BIND_VERTEX_BUFFER);
if (buf) {
cso_set_vertex_elements(r->cso, 2, r->owner->velems);
cso_set_vertex_elements(r->cso, 2, r->velems);
util_draw_vertex_buffer(r->pipe, buf, 0,
PIPE_PRIM_TRIANGLE_FAN,
Elements(r->vertices), /* verts */
@@ -1091,6 +1092,13 @@ struct renderer * renderer_create(struct vg_context *owner)
for (i = 0; i < 4; i++)
renderer->vertices[i][0][3] = 1.0f; /* w */
for (i = 0; i < 2; i++) {
renderer->velems[i].src_offset = i * 4 * sizeof(float);
renderer->velems[i].instance_divisor = 0;
renderer->velems[i].vertex_buffer_index = 0;
renderer->velems[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
}
renderer->state = RENDERER_STATE_INIT;
return renderer;

View File

@@ -54,19 +54,6 @@ struct vg_context * vg_current_context(void)
return _vg_context;
}
static void init_clear(struct vg_context *st)
{
struct pipe_context *pipe = st->pipe;
/* rasterizer state: bypass clipping */
memset(&st->clear.raster, 0, sizeof(st->clear.raster));
st->clear.raster.gl_rasterization_rules = 1;
/* fragment shader state: color pass-through program */
st->clear.fs =
util_make_fragment_passthrough_shader(pipe);
}
/**
* A depth/stencil rb will be needed regardless of what the visual says.
*/
@@ -103,7 +90,6 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
struct vg_context *share)
{
struct vg_context *ctx;
unsigned i;
ctx = CALLOC_STRUCT(vg_context);
@@ -120,8 +106,6 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
ctx->cso_context = cso_create_context(pipe);
init_clear(ctx);
ctx->default_paint = paint_create(ctx);
ctx->state.vg.stroke_paint = ctx->default_paint;
ctx->state.vg.fill_paint = ctx->default_paint;
@@ -143,13 +127,6 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
ctx->blend_sampler.mag_img_filter = PIPE_TEX_FILTER_NEAREST;
ctx->blend_sampler.normalized_coords = 0;
for (i = 0; i < 2; i++) {
ctx->velems[i].src_offset = i * 4 * sizeof(float);
ctx->velems[i].instance_divisor = 0;
ctx->velems[i].vertex_buffer_index = 0;
ctx->velems[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
}
vg_set_error(ctx, VG_NO_ERROR);
ctx->owned_objects[VG_OBJECT_PAINT] = cso_hash_create();
@@ -170,7 +147,6 @@ struct vg_context * vg_create_context(struct pipe_context *pipe,
void vg_destroy_context(struct vg_context *ctx)
{
struct pipe_resource **cbuf = &ctx->mask.cbuf;
struct pipe_resource **vsbuf = &ctx->vs_const_buffer;
util_destroy_blit(ctx->blit);
renderer_destroy(ctx->renderer);
@@ -181,29 +157,6 @@ void vg_destroy_context(struct vg_context *ctx)
if (*cbuf)
pipe_resource_reference(cbuf, NULL);
if (*vsbuf)
pipe_resource_reference(vsbuf, NULL);
if (ctx->clear.fs) {
cso_delete_fragment_shader(ctx->cso_context, ctx->clear.fs);
ctx->clear.fs = NULL;
}
if (ctx->plain_vs) {
vg_shader_destroy(ctx, ctx->plain_vs);
ctx->plain_vs = NULL;
}
if (ctx->clear_vs) {
vg_shader_destroy(ctx, ctx->clear_vs);
ctx->clear_vs = NULL;
}
if (ctx->texture_vs) {
vg_shader_destroy(ctx, ctx->texture_vs);
ctx->texture_vs = NULL;
}
if (ctx->pass_through_depth_fs)
vg_shader_destroy(ctx, ctx->pass_through_depth_fs);
if (ctx->mask.union_fs)
vg_shader_destroy(ctx, ctx->mask.union_fs);
if (ctx->mask.intersect_fs)
@@ -556,40 +509,3 @@ void vg_prepare_blend_surface_from_mask(struct vg_context *ctx)
if (dest_surface)
pipe_surface_reference(&dest_surface, NULL);
}
void * vg_plain_vs(struct vg_context *ctx)
{
if (!ctx->plain_vs) {
ctx->plain_vs = shader_create_from_text(ctx->pipe,
vs_plain_asm,
200,
PIPE_SHADER_VERTEX);
}
return ctx->plain_vs->driver;
}
void * vg_clear_vs(struct vg_context *ctx)
{
if (!ctx->clear_vs) {
ctx->clear_vs = shader_create_from_text(ctx->pipe,
vs_clear_asm,
200,
PIPE_SHADER_VERTEX);
}
return ctx->clear_vs->driver;
}
void * vg_texture_vs(struct vg_context *ctx)
{
if (!ctx->texture_vs) {
ctx->texture_vs = shader_create_from_text(ctx->pipe,
vs_texture_asm,
200,
PIPE_SHADER_VERTEX);
}
return ctx->texture_vs->driver;
}

View File

@@ -108,14 +108,6 @@ struct vg_context
struct cso_hash *owned_objects[VG_OBJECT_LAST];
struct {
struct pipe_shader_state vert_shader;
struct pipe_shader_state frag_shader;
struct pipe_rasterizer_state raster;
void *fs;
float vertices[4][2][4]; /**< vertex pos + color */
} clear;
struct {
struct pipe_resource *cbuf;
struct pipe_sampler_state sampler;
@@ -126,31 +118,16 @@ struct vg_context
struct vg_shader *set_fs;
} mask;
struct vg_shader *pass_through_depth_fs;
struct cso_context *cso_context;
struct pipe_resource *stencil_quad;
VGfloat stencil_vertices[4][2][4];
struct renderer *renderer;
struct shaders_cache *sc;
struct shader *shader;
struct pipe_sampler_state blend_sampler;
struct {
struct pipe_resource *buffer;
void *color_matrix_fs;
} filter;
struct vg_paint *default_paint;
struct blit_state *blit;
struct vg_shader *plain_vs;
struct vg_shader *clear_vs;
struct vg_shader *texture_vs;
struct pipe_resource *vs_const_buffer;
struct pipe_vertex_element velems[2];
};
struct vg_object {
@@ -285,8 +262,4 @@ static INLINE void vg_bound_rect(VGfloat coords[4],
}
}
void *vg_plain_vs(struct vg_context *ctx);
void *vg_clear_vs(struct vg_context *ctx);
void *vg_texture_vs(struct vg_context *ctx);
#endif