X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fprogram%2Fprogram.h;h=296fa40fbc143241fd12dee7ec49c34846b9e53a;hb=122ca27a48400fe2efe790ecf46e91b9c9b88108;hp=03b1066f3263fceec76e607d457195b151b61161;hpb=fd7f70af4897e4e31b11562eb1c473f0ee00fce5;p=mesa.git diff --git a/src/mesa/program/program.h b/src/mesa/program/program.h index 03b1066f326..296fa40fbc1 100644 --- a/src/mesa/program/program.h +++ b/src/mesa/program/program.h @@ -1,6 +1,5 @@ /* * Mesa 3-D graphics library - * Version: 6.5.3 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * @@ -17,9 +16,10 @@ * 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 NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL 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. + * THE AUTHORS OR COPYRIGHT HOLDERS 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. */ /** @@ -44,117 +44,59 @@ #include "main/mtypes.h" +#ifdef __cplusplus +extern "C" { +#endif + extern struct gl_program _mesa_DummyProgram; extern void -_mesa_init_program(GLcontext *ctx); +_mesa_init_program(struct gl_context *ctx); extern void -_mesa_free_program_data(GLcontext *ctx); +_mesa_free_program_data(struct gl_context *ctx); extern void -_mesa_update_default_objects_program(GLcontext *ctx); +_mesa_update_default_objects_program(struct gl_context *ctx); extern void -_mesa_set_program_error(GLcontext *ctx, GLint pos, const char *string); - -extern const GLubyte * -_mesa_find_line_column(const GLubyte *string, const GLubyte *pos, - GLint *line, GLint *col); - - -extern struct gl_program * -_mesa_init_vertex_program(GLcontext *ctx, - struct gl_vertex_program *prog, - GLenum target, GLuint id); +_mesa_set_program_error(struct gl_context *ctx, GLint pos, const char *string); extern struct gl_program * -_mesa_init_fragment_program(GLcontext *ctx, - struct gl_fragment_program *prog, - GLenum target, GLuint id); +_mesa_init_gl_program(struct gl_program *prog, GLenum target, GLuint id, + bool is_arb_asm); extern struct gl_program * -_mesa_init_geometry_program(GLcontext *ctx, - struct gl_geometry_program *prog, - GLenum target, GLuint id); - -extern struct gl_program * -_mesa_new_program(GLcontext *ctx, GLenum target, GLuint id); +_mesa_new_program(struct gl_context *ctx, GLenum target, GLuint id, + bool is_arb_asm); extern void -_mesa_delete_program(GLcontext *ctx, struct gl_program *prog); +_mesa_delete_program(struct gl_context *ctx, struct gl_program *prog); extern struct gl_program * -_mesa_lookup_program(GLcontext *ctx, GLuint id); +_mesa_lookup_program(struct gl_context *ctx, GLuint id); extern void -_mesa_reference_program(GLcontext *ctx, - struct gl_program **ptr, - struct gl_program *prog); - -static INLINE void -_mesa_reference_vertprog(GLcontext *ctx, - struct gl_vertex_program **ptr, - struct gl_vertex_program *prog) -{ - _mesa_reference_program(ctx, (struct gl_program **) ptr, - (struct gl_program *) prog); -} - -static INLINE void -_mesa_reference_fragprog(GLcontext *ctx, - struct gl_fragment_program **ptr, - struct gl_fragment_program *prog) -{ - _mesa_reference_program(ctx, (struct gl_program **) ptr, - (struct gl_program *) prog); -} - -static INLINE void -_mesa_reference_geomprog(GLcontext *ctx, - struct gl_geometry_program **ptr, - struct gl_geometry_program *prog) -{ - _mesa_reference_program(ctx, (struct gl_program **) ptr, - (struct gl_program *) prog); -} - -extern struct gl_program * -_mesa_clone_program(GLcontext *ctx, const struct gl_program *prog); +_mesa_reference_program_(struct gl_context *ctx, + struct gl_program **ptr, + struct gl_program *prog); -static INLINE struct gl_vertex_program * -_mesa_clone_vertex_program(GLcontext *ctx, - const struct gl_vertex_program *prog) -{ - return (struct gl_vertex_program *) _mesa_clone_program(ctx, &prog->Base); -} - -static INLINE struct gl_geometry_program * -_mesa_clone_geometry_program(GLcontext *ctx, - const struct gl_geometry_program *prog) -{ - return (struct gl_geometry_program *) _mesa_clone_program(ctx, &prog->Base); -} - -static INLINE struct gl_fragment_program * -_mesa_clone_fragment_program(GLcontext *ctx, - const struct gl_fragment_program *prog) +static inline void +_mesa_reference_program(struct gl_context *ctx, + struct gl_program **ptr, + struct gl_program *prog) { - return (struct gl_fragment_program *) _mesa_clone_program(ctx, &prog->Base); + if (*ptr != prog) + _mesa_reference_program_(ctx, ptr, prog); } - extern GLboolean _mesa_insert_instructions(struct gl_program *prog, GLuint start, GLuint count); extern GLboolean -_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count); - -extern struct gl_program * -_mesa_combine_programs(GLcontext *ctx, - const struct gl_program *progA, - const struct gl_program *progB); +_mesa_delete_instructions(struct gl_program *prog, GLuint start, GLuint count, + void *mem_ctx); extern void _mesa_find_used_registers(const struct gl_program *prog, @@ -165,40 +107,60 @@ extern GLint _mesa_find_free_register(const GLboolean used[], GLuint maxRegs, GLuint firstReg); -extern void -_mesa_postprocess_program(GLcontext *ctx, struct gl_program *prog); - -/* keep these in the same order as TGSI_PROCESSOR_* */ +extern GLint +_mesa_get_min_invocations_per_fragment(struct gl_context *ctx, + const struct gl_program *prog, + bool ignore_sample_qualifier); -static INLINE GLuint -_mesa_program_target_to_index(GLenum v) +static inline GLuint +_mesa_program_enum_to_shader_stage(GLenum v) { - switch(v) - { + switch (v) { case GL_VERTEX_PROGRAM_ARB: return MESA_SHADER_VERTEX; case GL_FRAGMENT_PROGRAM_ARB: return MESA_SHADER_FRAGMENT; + case GL_FRAGMENT_SHADER_ATI: + return MESA_SHADER_FRAGMENT; case GL_GEOMETRY_PROGRAM_NV: return MESA_SHADER_GEOMETRY; + case GL_TESS_CONTROL_PROGRAM_NV: + return MESA_SHADER_TESS_CTRL; + case GL_TESS_EVALUATION_PROGRAM_NV: + return MESA_SHADER_TESS_EVAL; + case GL_COMPUTE_PROGRAM_NV: + return MESA_SHADER_COMPUTE; default: - ASSERT(0); + assert(0); return ~0; } } -static INLINE GLenum -_mesa_program_index_to_target(GLuint i) + +static inline GLenum +_mesa_shader_stage_to_program(unsigned stage) { - GLenum enums[MESA_SHADER_TYPES] = { - GL_VERTEX_PROGRAM_ARB, - GL_FRAGMENT_PROGRAM_ARB, - GL_GEOMETRY_PROGRAM_NV, - }; - if(i >= MESA_SHADER_TYPES) - return 0; - else - return enums[i]; + switch (stage) { + case MESA_SHADER_VERTEX: + return GL_VERTEX_PROGRAM_ARB; + case MESA_SHADER_FRAGMENT: + return GL_FRAGMENT_PROGRAM_ARB; + case MESA_SHADER_GEOMETRY: + return GL_GEOMETRY_PROGRAM_NV; + case MESA_SHADER_TESS_CTRL: + return GL_TESS_CONTROL_PROGRAM_NV; + case MESA_SHADER_TESS_EVAL: + return GL_TESS_EVALUATION_PROGRAM_NV; + case MESA_SHADER_COMPUTE: + return GL_COMPUTE_PROGRAM_NV; + } + + assert(!"Unexpected shader stage in _mesa_shader_stage_to_program"); + return GL_VERTEX_PROGRAM_ARB; } +#ifdef __cplusplus +} /* extern "C" */ +#endif + #endif /* PROGRAM_H */