mesa: add misc tessellation shader support
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:

committed by
Marek Olšák

parent
78d3054980
commit
a894ed8293
@@ -365,6 +365,16 @@ _mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id)
|
|||||||
CALLOC_STRUCT(gl_geometry_program),
|
CALLOC_STRUCT(gl_geometry_program),
|
||||||
target, id);
|
target, id);
|
||||||
break;
|
break;
|
||||||
|
case GL_TESS_CONTROL_PROGRAM_NV:
|
||||||
|
prog = _mesa_init_tess_ctrl_program(ctx,
|
||||||
|
CALLOC_STRUCT(gl_tess_ctrl_program),
|
||||||
|
target, id);
|
||||||
|
break;
|
||||||
|
case GL_TESS_EVALUATION_PROGRAM_NV:
|
||||||
|
prog = _mesa_init_tess_eval_program(ctx,
|
||||||
|
CALLOC_STRUCT(gl_tess_eval_program),
|
||||||
|
target, id);
|
||||||
|
break;
|
||||||
case GL_COMPUTE_PROGRAM_NV:
|
case GL_COMPUTE_PROGRAM_NV:
|
||||||
prog = _mesa_init_compute_program(ctx,
|
prog = _mesa_init_compute_program(ctx,
|
||||||
CALLOC_STRUCT(gl_compute_program),
|
CALLOC_STRUCT(gl_compute_program),
|
||||||
@@ -586,6 +596,23 @@ _mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog)
|
|||||||
gpc->UsesStreams = gp->UsesStreams;
|
gpc->UsesStreams = gp->UsesStreams;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GL_TESS_CONTROL_PROGRAM_NV:
|
||||||
|
{
|
||||||
|
const struct gl_tess_ctrl_program *tcp = gl_tess_ctrl_program_const(prog);
|
||||||
|
struct gl_tess_ctrl_program *tcpc = gl_tess_ctrl_program(clone);
|
||||||
|
tcpc->VerticesOut = tcp->VerticesOut;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GL_TESS_EVALUATION_PROGRAM_NV:
|
||||||
|
{
|
||||||
|
const struct gl_tess_eval_program *tep = gl_tess_eval_program_const(prog);
|
||||||
|
struct gl_tess_eval_program *tepc = gl_tess_eval_program(clone);
|
||||||
|
tepc->PrimitiveMode = tep->PrimitiveMode;
|
||||||
|
tepc->Spacing = tep->Spacing;
|
||||||
|
tepc->VertexOrder = tep->VertexOrder;
|
||||||
|
tepc->PointMode = tep->PointMode;
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_problem(NULL, "Unexpected target in _mesa_clone_program");
|
_mesa_problem(NULL, "Unexpected target in _mesa_clone_program");
|
||||||
}
|
}
|
||||||
|
@@ -157,6 +157,25 @@ _mesa_reference_compprog(struct gl_context *ctx,
|
|||||||
(struct gl_program *) prog);
|
(struct gl_program *) prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_mesa_reference_tesscprog(struct gl_context *ctx,
|
||||||
|
struct gl_tess_ctrl_program **ptr,
|
||||||
|
struct gl_tess_ctrl_program *prog)
|
||||||
|
{
|
||||||
|
_mesa_reference_program(ctx, (struct gl_program **) ptr,
|
||||||
|
(struct gl_program *) prog);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_mesa_reference_tesseprog(struct gl_context *ctx,
|
||||||
|
struct gl_tess_eval_program **ptr,
|
||||||
|
struct gl_tess_eval_program *prog)
|
||||||
|
{
|
||||||
|
_mesa_reference_program(ctx, (struct gl_program **) ptr,
|
||||||
|
(struct gl_program *) prog);
|
||||||
|
}
|
||||||
|
|
||||||
extern struct gl_program *
|
extern struct gl_program *
|
||||||
_mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog);
|
_mesa_clone_program(struct gl_context *ctx, const struct gl_program *prog);
|
||||||
|
|
||||||
@@ -167,6 +186,20 @@ _mesa_clone_vertex_program(struct gl_context *ctx,
|
|||||||
return (struct gl_vertex_program *) _mesa_clone_program(ctx, &prog->Base);
|
return (struct gl_vertex_program *) _mesa_clone_program(ctx, &prog->Base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct gl_tess_ctrl_program *
|
||||||
|
_mesa_clone_tess_ctrl_program(struct gl_context *ctx,
|
||||||
|
const struct gl_tess_ctrl_program *prog)
|
||||||
|
{
|
||||||
|
return (struct gl_tess_ctrl_program *) _mesa_clone_program(ctx, &prog->Base);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline struct gl_tess_eval_program *
|
||||||
|
_mesa_clone_tess_eval_program(struct gl_context *ctx,
|
||||||
|
const struct gl_tess_eval_program *prog)
|
||||||
|
{
|
||||||
|
return (struct gl_tess_eval_program *) _mesa_clone_program(ctx, &prog->Base);
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct gl_geometry_program *
|
static inline struct gl_geometry_program *
|
||||||
_mesa_clone_geometry_program(struct gl_context *ctx,
|
_mesa_clone_geometry_program(struct gl_context *ctx,
|
||||||
const struct gl_geometry_program *prog)
|
const struct gl_geometry_program *prog)
|
||||||
@@ -262,7 +295,9 @@ _mesa_shader_stage_to_program(unsigned stage)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Cast wrappers from gl_program to gl_vertex/geometry/fragment_program */
|
/* Cast wrappers from gl_program to derived program types.
|
||||||
|
* (e.g. gl_vertex_program)
|
||||||
|
*/
|
||||||
|
|
||||||
static inline struct gl_fragment_program *
|
static inline struct gl_fragment_program *
|
||||||
gl_fragment_program(struct gl_program *prog)
|
gl_fragment_program(struct gl_program *prog)
|
||||||
@@ -315,6 +350,31 @@ gl_compute_program_const(const struct gl_program *prog)
|
|||||||
return (const struct gl_compute_program *) prog;
|
return (const struct gl_compute_program *) prog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline struct gl_tess_ctrl_program *
|
||||||
|
gl_tess_ctrl_program(struct gl_program *prog)
|
||||||
|
{
|
||||||
|
return (struct gl_tess_ctrl_program *) prog;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const struct gl_tess_ctrl_program *
|
||||||
|
gl_tess_ctrl_program_const(const struct gl_program *prog)
|
||||||
|
{
|
||||||
|
return (const struct gl_tess_ctrl_program *) prog;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline struct gl_tess_eval_program *
|
||||||
|
gl_tess_eval_program(struct gl_program *prog)
|
||||||
|
{
|
||||||
|
return (struct gl_tess_eval_program *) prog;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const struct gl_tess_eval_program *
|
||||||
|
gl_tess_eval_program_const(const struct gl_program *prog)
|
||||||
|
{
|
||||||
|
return (const struct gl_tess_eval_program *) prog;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
Reference in New Issue
Block a user