Merge branch 'mesa_7_5_branch' into mesa_7_6_branch
This commit is contained in:
@@ -1555,17 +1555,12 @@ _mesa_execute_program(GLcontext * ctx,
|
|||||||
case OPCODE_TXB: /* GL_ARB_fragment_program only */
|
case OPCODE_TXB: /* GL_ARB_fragment_program only */
|
||||||
/* Texel lookup with LOD bias */
|
/* Texel lookup with LOD bias */
|
||||||
{
|
{
|
||||||
const GLuint unit = machine->Samplers[inst->TexSrcUnit];
|
|
||||||
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
|
||||||
GLfloat texcoord[4], color[4], lodBias;
|
GLfloat texcoord[4], color[4], lodBias;
|
||||||
|
|
||||||
fetch_vector4(&inst->SrcReg[0], machine, texcoord);
|
fetch_vector4(&inst->SrcReg[0], machine, texcoord);
|
||||||
|
|
||||||
/* texcoord[3] is the bias to add to lambda */
|
/* texcoord[3] is the bias to add to lambda */
|
||||||
lodBias = texUnit->LodBias + texcoord[3];
|
lodBias = texcoord[3];
|
||||||
if (texUnit->_Current) {
|
|
||||||
lodBias += texUnit->_Current->LodBias;
|
|
||||||
}
|
|
||||||
|
|
||||||
fetch_texel(ctx, machine, inst, texcoord, lodBias, color);
|
fetch_texel(ctx, machine, inst, texcoord, lodBias, color);
|
||||||
|
|
||||||
|
@@ -328,23 +328,29 @@ get_arrays_bounds(const struct st_vertex_program *vp,
|
|||||||
const GLubyte **low, const GLubyte **high)
|
const GLubyte **low, const GLubyte **high)
|
||||||
{
|
{
|
||||||
const GLubyte *low_addr = NULL;
|
const GLubyte *low_addr = NULL;
|
||||||
|
const GLubyte *high_addr = NULL;
|
||||||
GLuint attr;
|
GLuint attr;
|
||||||
GLint stride;
|
|
||||||
|
|
||||||
for (attr = 0; attr < vp->num_inputs; attr++) {
|
for (attr = 0; attr < vp->num_inputs; attr++) {
|
||||||
const GLuint mesaAttr = vp->index_to_input[attr];
|
const GLuint mesaAttr = vp->index_to_input[attr];
|
||||||
|
const GLint stride = arrays[mesaAttr]->StrideB;
|
||||||
const GLubyte *start = arrays[mesaAttr]->Ptr;
|
const GLubyte *start = arrays[mesaAttr]->Ptr;
|
||||||
stride = arrays[mesaAttr]->StrideB;
|
const unsigned sz = (arrays[mesaAttr]->Size *
|
||||||
|
_mesa_sizeof_type(arrays[mesaAttr]->Type));
|
||||||
|
const GLubyte *end = start + (max_index * stride) + sz;
|
||||||
|
|
||||||
if (attr == 0) {
|
if (attr == 0) {
|
||||||
low_addr = start;
|
low_addr = start;
|
||||||
|
high_addr = end;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
low_addr = MIN2(low_addr, start);
|
low_addr = MIN2(low_addr, start);
|
||||||
|
high_addr = MAX2(high_addr, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*low = low_addr;
|
*low = low_addr;
|
||||||
*high = low_addr + (max_index + 1) * stride;
|
*high = high_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -89,6 +89,8 @@ fetch_texel_lod( GLcontext *ctx, const GLfloat texcoord[4], GLfloat lambda,
|
|||||||
* Fetch a texel with the given partial derivatives to compute a level
|
* Fetch a texel with the given partial derivatives to compute a level
|
||||||
* of detail in the mipmap.
|
* of detail in the mipmap.
|
||||||
* Called via machine->FetchTexelDeriv()
|
* Called via machine->FetchTexelDeriv()
|
||||||
|
* \param lodBias the lod bias which may be specified by a TXB instruction,
|
||||||
|
* otherwise zero.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
fetch_texel_deriv( GLcontext *ctx, const GLfloat texcoord[4],
|
fetch_texel_deriv( GLcontext *ctx, const GLfloat texcoord[4],
|
||||||
@@ -96,7 +98,8 @@ fetch_texel_deriv( GLcontext *ctx, const GLfloat texcoord[4],
|
|||||||
GLfloat lodBias, GLuint unit, GLfloat color[4] )
|
GLfloat lodBias, GLuint unit, GLfloat color[4] )
|
||||||
{
|
{
|
||||||
SWcontext *swrast = SWRAST_CONTEXT(ctx);
|
SWcontext *swrast = SWRAST_CONTEXT(ctx);
|
||||||
const struct gl_texture_object *texObj = ctx->Texture.Unit[unit]._Current;
|
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||||
|
const struct gl_texture_object *texObj = texUnit->_Current;
|
||||||
|
|
||||||
if (texObj) {
|
if (texObj) {
|
||||||
const struct gl_texture_image *texImg =
|
const struct gl_texture_image *texImg =
|
||||||
@@ -108,10 +111,12 @@ fetch_texel_deriv( GLcontext *ctx, const GLfloat texcoord[4],
|
|||||||
|
|
||||||
lambda = _swrast_compute_lambda(texdx[0], texdy[0], /* ds/dx, ds/dy */
|
lambda = _swrast_compute_lambda(texdx[0], texdy[0], /* ds/dx, ds/dy */
|
||||||
texdx[1], texdy[1], /* dt/dx, dt/dy */
|
texdx[1], texdy[1], /* dt/dx, dt/dy */
|
||||||
texdx[3], texdy[2], /* dq/dx, dq/dy */
|
texdx[3], texdy[3], /* dq/dx, dq/dy */
|
||||||
texW, texH,
|
texW, texH,
|
||||||
texcoord[0], texcoord[1], texcoord[3],
|
texcoord[0], texcoord[1], texcoord[3],
|
||||||
1.0F / texcoord[3]) + lodBias;
|
1.0F / texcoord[3]);
|
||||||
|
|
||||||
|
lambda += lodBias + texUnit->LodBias + texObj->LodBias;
|
||||||
|
|
||||||
lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
|
lambda = CLAMP(lambda, texObj->MinLod, texObj->MaxLod);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user