brender-1997/softrend/drv_ip.h
2022-05-03 14:31:40 -07:00

408 lines
17 KiB
C

/*
* Copyright (c) 1993-1995 Argonaut Technologies Limited. All rights reserved.
*
* $Id: drv_ip.h 2.27 1997/05/22 14:44:54 jon Exp $
* $Locker: $
*
* Prototypes for functions internal to driver
*/
#ifndef _DRV_IP_H_
#define _DRV_IP_H_
#ifndef NO_PROTOTYPES
#ifdef __cplusplus
extern "C" {
#endif
/*
* object.c
*/
char * BR_CMETHOD_DECL(br_object_soft, identifier)( br_object *self);
br_device * BR_CMETHOD_DECL(br_object_soft, device)( br_object *self);
/*
* device.c
*/
br_device * DeviceSoftAllocate(char *identifier);
/*
* rendtype.c
*/
br_renderer_facility * RendererFacilitySoftAllocate(br_device *dev, char *identifier);
/*
* renderer.c
*/
extern const br_token RendererPartsTokens[];
br_renderer * RendererSoftAllocate(br_device *dev, struct br_renderer_facility *type, struct br_primitive_library *prims);
br_error BR_CMETHOD_DECL(br_renderer_soft,commandModeSet)
(struct br_renderer *self, br_token mode);
br_error BR_CMETHOD_DECL(br_renderer_soft,commandModeQuery)
(struct br_renderer *self, br_token *mode);
br_error BR_CMETHOD_DECL(br_renderer_soft,commandModeDefault)
(struct br_renderer *self);
br_error BR_CMETHOD_DECL(br_renderer_soft,commandModePush)
(struct br_renderer *self);
br_error BR_CMETHOD_DECL(br_renderer_soft,commandModePop)
(struct br_renderer *self);
br_error BR_CMETHOD_DECL(br_renderer_soft, flush)
(struct br_renderer *self, br_boolean wait);
br_error BR_CMETHOD_DECL(br_renderer_soft, synchronise)
(struct br_renderer *self, br_token sync_type, br_boolean block);
/*
* rendstat.c
*/
br_error CheckPrimitiveState(struct br_renderer *self);
br_error BR_CMETHOD_DECL(br_renderer_soft,partSet)
(struct br_renderer *self, br_token part, br_int_32 index,
br_token t, br_uint_32 value);
br_error BR_CMETHOD_DECL(br_renderer_soft,partSetMany)
(struct br_renderer *self, br_token part, br_int_32 index,
br_token_value * tv, br_int_32 *pcount);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQuery)
(struct br_renderer *self, br_token part, br_int_32 index,
br_uint_32 *pvalue, br_token t);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQueryBuffer)
(struct br_renderer *self, br_token part, br_int_32 index,
br_uint_32 *pvalue, br_uint_32 *buffer, br_size_t buffer_size, br_token t);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQueryMany)(struct br_renderer *self,
br_token part, br_int_32 index,
br_token_value *tv, void *extra, br_size_t extra_size, br_int_32 *pcount);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQueryManySize)
(struct br_renderer *self, br_token part, br_int_32 index,
br_size_t *pextra_size, br_token_value *tv);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQueryAll)
(struct br_renderer *self, br_token part, br_int_32 index,
br_token_value *buffer, br_size_t buffer_size);
br_error BR_CMETHOD_DECL(br_renderer_soft,partQueryAllSize)
(struct br_renderer *self, br_token part, br_int_32 index,
br_size_t *psize);
br_error BR_CMETHOD_DECL(br_renderer_soft, partQueryCapability)(
struct br_renderer *self,
br_token part,
br_int_32 index,
br_token_value *buffer,
br_size_t buffer_size);
br_error BR_CMETHOD_DECL(br_renderer_soft, partIndexQuery)(
struct br_renderer *self,
br_token part,
br_int_32 *pnindex);
br_error BR_CMETHOD_DECL(br_renderer_soft, stateQueryPerformance)(
struct br_renderer *self,
br_uint_32 *speed);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateMask)
(struct br_renderer *self, br_uint_32 *mask, br_token *parts, int n_parts);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateDefault)
(struct br_renderer *self, br_uint_32 mask);
br_error StateCopy(struct state_all *dest, struct state_all *src, br_uint_32 copy_mask, void *res);
br_error BR_CMETHOD_DECL(br_renderer_soft,modelMulF)
(struct br_renderer *self, br_matrix34_f *m);
br_error BR_CMETHOD_DECL(br_renderer_soft,modelMulX)
(struct br_renderer *self, br_matrix34_x *m);
br_error BR_CMETHOD_DECL(br_renderer_soft,modelPopPushMulF)
(struct br_renderer *self, br_matrix34_f *m);
br_error BR_CMETHOD_DECL(br_renderer_soft,modelPopPushMulX)
(struct br_renderer *self, br_matrix34_x *m);
br_error BR_CMETHOD_DECL(br_renderer_soft,modelInvert)
(struct br_renderer *self);
br_error BR_CMETHOD_DECL(br_renderer_soft,boundsTestF)
(struct br_renderer *self, br_token *r, br_bounds3_f *bounds);
br_error BR_CMETHOD_DECL(br_renderer_soft,boundsTestX)
(struct br_renderer *self, br_token *r, br_bounds3_x *bounds);
br_error BR_CMETHOD_DECL(br_renderer_soft, coverageTestF)
(struct br_renderer *self, br_float *r, br_bounds3_f *bounds);
br_error BR_CMETHOD_DECL(br_renderer_soft, coverageTestX)
(struct br_renderer *self, br_fixed_ls *r, br_bounds3_x *bounds);
br_error BR_CMETHOD_DECL(br_renderer_soft,viewDistanceF)
(struct br_renderer *self, br_float *r);
br_error BR_CMETHOD_DECL(br_renderer_soft,viewDistanceX)
(struct br_renderer *self, br_fixed_ls *r);
br_error BR_CMETHOD_DECL(br_renderer_soft,statePush)
(struct br_renderer *self, br_uint_32 mask);
br_error BR_CMETHOD_DECL(br_renderer_soft,statePop)
(struct br_renderer *self, br_uint_32 mask);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateSave)
(struct br_renderer *self, struct br_renderer_state_stored *save, br_uint_32 mask);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateRestore)
(struct br_renderer *self, struct br_renderer_state_stored *save, br_uint_32 mask);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateDefault)
(struct br_renderer *self, br_uint_32 mask);
br_error BR_CMETHOD_DECL(br_renderer_soft,stateMask)
(struct br_renderer *self, br_uint_32 *mask, br_token *parts, int n_parts);
br_error BR_CMETHOD_DECL(br_renderer_soft, testRender)(
struct br_renderer *self,
br_token type,
union brp_vertex *v0,
union brp_vertex *v1,
union brp_vertex *v2);
/*
* sstate.c
*/
br_renderer_state_stored * RendererStateStoredSoftAllocate(br_renderer *renderer,
struct state_all *base_state, br_uint_32 m, br_token_value *tv);
br_error StateCopyToStored(struct br_renderer_state_stored *dest, struct state_all *src, br_uint_32 copy_mask, void *res);
br_error StateCopyFromStored(struct state_all *dest, struct br_renderer_state_stored *src, br_uint_32 copy_mask, void *res);
/*
* state.c
*/
br_error StateInitialise(struct state_all *state);
struct br_tv_template * FindStateTemplate(struct br_renderer *self, struct state_all **state, br_token part, br_int_32 index);
void TemplateActions(struct state_all *state, br_token part, br_int_32 index, br_uint_32 mask);
void TouchModelToView(br_renderer *self);
/*
* genrend.c
*/
void GEOMETRY_CALL Vertex_ClearFlags(struct br_geometry *self, struct br_renderer *renderer);
void GEOMETRY_CALL ScratchFree(struct br_geometry *self, struct br_renderer *renderer);
void VertexGeometryFns(struct br_renderer *renderer, geometry_fn *prim_outcode);
/*
* gprim.c
*/
br_geometry_primitives * GeometryPrimitivesAllocate(br_renderer_facility *type, char *id);
/*
* gv1model.c
*/
struct br_geometry_v1_model * GeometryV1ModelAllocate(br_renderer_facility *type, char *id);
/*
* gv1buckt.c
*/
struct br_geometry_v1_buckets * GeometryV1BucketsAllocate(br_renderer_facility *type, char *id);
/*
* lighting.c
*/
struct br_geometry_lighting * GeometryLightingAllocate(br_renderer_facility *type, char *id);
/*
* v1model.c
*/
br_error BR_CMETHOD_DECL(br_geometry_v1_model_soft, render)
(struct br_geometry *self, struct br_renderer *renderer, struct v11model *model,
struct br_renderer_state_stored *default_state,
br_token type);
br_error BR_CMETHOD_DECL(br_geometry_v1_model_soft, renderOnScreen)
(struct br_geometry *self, struct br_renderer *renderer, struct v11model *model,
struct br_renderer_state_stored *default_state,
br_token type);
/*
* convert.c
*/
void BR_ASM_CALL RenderConvert1(struct brp_block *block,
brp_vertex *v0);
void BR_ASM_CALL RenderConvert2(struct brp_block *block,
brp_vertex *v0, brp_vertex *v1);
void BR_ASM_CALL RenderConvert3(struct brp_block *block,
brp_vertex *v0, brp_vertex *v1,brp_vertex *v2);
void BR_ASM_CALL RenderConvert4(struct brp_block *block,
brp_vertex *v0, brp_vertex *v1,brp_vertex *v2,brp_vertex *v3);
void ConvertVertex(brp_vertex *dest, brp_vertex *src);
/*
* clip.c
*/
union brp_vertex *FaceClip(br_renderer *self, union brp_vertex *clip_in, br_uint_32 mask, br_uint_32 codes, int n, int *n_out);
void ClippedRenderTriangles(struct br_renderer *renderer, brp_block *block, union brp_vertex *cp_in, int n,
struct v11face *fp, struct temp_face *tfp);
br_boolean ClipLine(br_renderer *self, union brp_vertex *out, union brp_vertex *v0, union brp_vertex *v1, br_uint_32 mask, br_uint_32 codes);
void ClippedRenderLine(struct br_renderer *renderer, brp_block *block, union brp_vertex *cp_in);
/*
* setup.c
*/
br_error CacheUpdate(br_renderer *self);
void StaticCacheUpdate_PerScene(br_renderer *self);
void StaticCacheUpdate_PerModel(br_renderer *self);
void ViewToModelUpdate(br_renderer *self);
void ModelToScreenUpdate(br_renderer *self);
void ActiveLightsFind(br_renderer *self);
void ActiveLightsUpdate(br_renderer *self);
br_int_32 GenerateSurfaceFunctions(br_renderer *self, surface_fn **fns, br_uint_32 mask);
br_uint_32 ComponentMaskToSlots(br_uint_32 cm);
void GeometryFunctionReset(br_renderer *renderer);
void GeometryFunctionAdd(br_renderer *renderer, geometry_fn *fn);
void GeometryFunctionOnScreenAdd(br_renderer *renderer, geometry_fn *fn);
void GeometryFunctionBothAdd(br_renderer *renderer, geometry_fn *fn);
void PrimBlockReset(br_renderer *renderer);
void PrimBlockAdd(br_renderer *renderer, brp_render_fn *fn);
void PrimBlockOnScreenAdd(br_renderer *renderer, brp_render_fn *fn);
void PrimBlockAddBoth(br_renderer *renderer, brp_render_fn *fn);
/*
* onscreen.c
*/
br_token OnScreenCheck(br_renderer *self, br_matrix4 *model_to_screen, br_bounds3 *bounds);
/*
* light8.c
*/
void SURFACE_CALL SurfaceIndexZero(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceIndexUnlit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceIndexLit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceIndexLitSimple(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void ActiveLightAccumulateIndexSet(struct active_light *alp);
void GEOMETRY_CALL GeometryIndexLit(struct br_geometry *self, struct br_renderer *renderer);
void BR_ASM_CALL FaceIndexLit(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void SURFACE_CALL VertexIndexLit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceIndexLit1MD(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
/*
* light24.c
*/
void SURFACE_CALL SurfaceColourZero(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceColourUnlit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceColourLit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void SURFACE_CALL SurfaceColourLitSimple(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour gcolour, br_scalar *comp);
void ActiveLightAccumulateColourSet(struct active_light *alp);
void GEOMETRY_CALL GeometryColourLit(struct br_geometry *self, struct br_renderer *renderer);
void BR_ASM_CALL FaceColourLit(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void SURFACE_CALL VertexColourLit(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
/*
* mapping.c
*/
void SURFACE_CALL SurfaceMapEnvironmentInfinite(br_renderer *self,
br_vector3 *p, br_vector2 *map, br_vector3 *normal, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapEnvironmentLocal(br_renderer *self,
br_vector3 *p, br_vector2 *map, br_vector3 *normal, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryX(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryY(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryZ(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryMap(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryMapScale(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryMapScaleTranslate(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryMapCopy(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void SURFACE_CALL SurfaceMapGeometryMapShift(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
void BR_ASM_CALL OpTriangleMapQuad(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
/*
* alpha.c
*/
void SURFACE_CALL SurfaceAlpha(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
/*
* depth.c
*/
void SURFACE_CALL SurfaceLinearDepth(br_renderer *self, br_vector3 *p, br_vector2 *map, br_vector3 *n, br_colour colour, br_scalar *comp);
/*
* faceops.c
*/
void BR_ASM_CALL OpTriangleClip(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleClipConstantSurf(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleConstantSurf(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleTwoSidedConstantSurf(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleMappingWrapFix(struct brp_block *block, union brp_vertex *v0, union brp_vertex *v1, union brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleRelightTwoSided(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleToLines(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleReplicateConstant(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleReplicateConstantI(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleReplicateConstantRGB(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleToPoints(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleToPoints_OS(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpLineClip(struct brp_block *block, brp_vertex *v0, brp_vertex *v1);
void BR_ASM_CALL OpTriangleSubdivide(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void BR_ASM_CALL OpTriangleSubdivideOnScreen(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2,
struct v11face *fp, struct temp_face *tfp);
void SubdivideSetThreshold(br_int_32 subdivide_tolerance);
/*
* heap.c
*/
void BR_ASM_CALL OpHeapAddPoint(struct brp_block *block, brp_vertex *v0);
void BR_ASM_CALL OpHeapAddLine(struct brp_block *block, brp_vertex *v0, brp_vertex *v1);
void BR_ASM_CALL OpHeapAddTriangle(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2);
void BR_ASM_CALL OpHeapAddPointConvert(struct brp_block *block, brp_vertex *v0);
void BR_ASM_CALL OpHeapAddLineConvert(struct brp_block *block, brp_vertex *v0, brp_vertex *v1);
void BR_ASM_CALL OpHeapAddTriangleConvert(struct brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2);
/*
* Platform dependant downcoded geometry support
*/
#ifdef __386__
#include "v1m_386.h"
#include "gen_386.h"
#include "face_386.h"
#endif
/* Rampant optimism ...
*/
#ifdef __MIPS__
#endif
#ifdef __ALPHA__
#endif
#ifdef __PPC__
#endif
#ifdef __680X0__
#endif
#ifdef __cplusplus
};
#endif
#endif
#endif