New ctx->Driver.Map/UnmapTexture() functions for accessing textures from t_vb_program.c
This commit is contained in:
@@ -112,6 +112,8 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
|
|||||||
driver->DeleteTexture = _mesa_delete_texture_object;
|
driver->DeleteTexture = _mesa_delete_texture_object;
|
||||||
driver->NewTextureImage = _mesa_new_texture_image;
|
driver->NewTextureImage = _mesa_new_texture_image;
|
||||||
driver->FreeTexImageData = _mesa_free_texture_image_data;
|
driver->FreeTexImageData = _mesa_free_texture_image_data;
|
||||||
|
driver->MapTexture = NULL;
|
||||||
|
driver->UnmapTexture = NULL;
|
||||||
driver->TextureMemCpy = _mesa_memcpy;
|
driver->TextureMemCpy = _mesa_memcpy;
|
||||||
driver->IsTextureResident = NULL;
|
driver->IsTextureResident = NULL;
|
||||||
driver->PrioritizeTexture = NULL;
|
driver->PrioritizeTexture = NULL;
|
||||||
|
@@ -213,7 +213,7 @@
|
|||||||
/** For GL_ARB_vertex_shader */
|
/** For GL_ARB_vertex_shader */
|
||||||
/*@{*/
|
/*@{*/
|
||||||
#define MAX_VERTEX_ATTRIBS 16
|
#define MAX_VERTEX_ATTRIBS 16
|
||||||
#define MAX_VERTEX_TEXTURE_IMAGE_UNITS 0
|
#define MAX_VERTEX_TEXTURE_IMAGE_UNITS MAX_TEXTURE_UNITS
|
||||||
#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS)
|
#define MAX_COMBINED_TEXTURE_IMAGE_UNITS (MAX_TEXTURE_IMAGE_UNITS + MAX_VERTEX_TEXTURE_IMAGE_UNITS)
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
||||||
|
@@ -493,6 +493,11 @@ struct dd_function_table {
|
|||||||
*/
|
*/
|
||||||
void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
|
void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage );
|
||||||
|
|
||||||
|
/** Map texture image data into user space */
|
||||||
|
void (*MapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
|
||||||
|
/** Unmap texture images from user space */
|
||||||
|
void (*UnmapTexture)( GLcontext *ctx, struct gl_texture_object *tObj );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note: no context argument. This function doesn't initially look
|
* Note: no context argument. This function doesn't initially look
|
||||||
* like it belongs here, except that the driver is the only entity
|
* like it belongs here, except that the driver is the only entity
|
||||||
|
@@ -245,6 +245,50 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map the texture images which the vertex program will access (if any).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
map_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
|
||||||
|
{
|
||||||
|
GLuint u;
|
||||||
|
|
||||||
|
if (!ctx->Driver.MapTexture)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
|
||||||
|
if (vp->Base.TexturesUsed[u]) {
|
||||||
|
/* Note: _Current *should* correspond to the target indicated
|
||||||
|
* in TexturesUsed[u].
|
||||||
|
*/
|
||||||
|
ctx->Driver.MapTexture(ctx, ctx->Texture.Unit[u]._Current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unmap the texture images which were used by the vertex program (if any).
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
unmap_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
|
||||||
|
{
|
||||||
|
GLuint u;
|
||||||
|
|
||||||
|
if (!ctx->Driver.MapTexture)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
|
||||||
|
if (vp->Base.TexturesUsed[u]) {
|
||||||
|
/* Note: _Current *should* correspond to the target indicated
|
||||||
|
* in TexturesUsed[u].
|
||||||
|
*/
|
||||||
|
ctx->Driver.UnmapTexture(ctx, ctx->Texture.Unit[u]._Current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function executes vertex programs
|
* This function executes vertex programs
|
||||||
*/
|
*/
|
||||||
@@ -278,6 +322,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map_textures(ctx, program);
|
||||||
|
|
||||||
for (i = 0; i < VB->Count; i++) {
|
for (i = 0; i < VB->Count; i++) {
|
||||||
GLuint attr;
|
GLuint attr;
|
||||||
|
|
||||||
@@ -329,6 +375,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unmap_textures(ctx, program);
|
||||||
|
|
||||||
/* Fixup fog and point size results if needed */
|
/* Fixup fog and point size results if needed */
|
||||||
if (program->IsNVProgram) {
|
if (program->IsNVProgram) {
|
||||||
if (ctx->Fog.Enabled &&
|
if (ctx->Fog.Enabled &&
|
||||||
|
Reference in New Issue
Block a user