[Mesa-dev] [PATCH 10/13] mesa: fix _mesa_get_fallback_texture() to handle all texture targets
Brian Paul
brianp at vmware.com
Mon Feb 13 09:00:16 PST 2012
On 02/13/2012 09:47 AM, Jose Fonseca wrote:
>
>
> ----- Original Message -----
>> Previously, this function only handled 2D textures.
>>
>> The fallback texture is used when we try to sample from an incomplete
>> texture object. GLSL says sampling an incomplete texture should
>> return
>> (0,0,0,1).
>> ---
>> src/mesa/main/mtypes.h | 2 +-
>> src/mesa/main/shared.c | 8 ++-
>> src/mesa/main/texobj.c | 118
>> ++++++++++++++++++++++++++++++++++++---------
>> src/mesa/main/texobj.h | 4 +-
>> src/mesa/main/texstate.c | 10 +++-
>> 5 files changed, 110 insertions(+), 32 deletions(-)
>>
>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>> index 5ef97c8..9200f3f 100644
>> --- a/src/mesa/main/mtypes.h
>> +++ b/src/mesa/main/mtypes.h
>> @@ -2483,7 +2483,7 @@ struct gl_shared_state
>> struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS];
>>
>> /** Fallback texture used when a bound texture is incomplete */
>> - struct gl_texture_object *FallbackTex;
>> + struct gl_texture_object *FallbackTex[NUM_TEXTURE_TARGETS];
>>
>> /**
>> * \name Thread safety and statechange notification for texture
>> diff --git a/src/mesa/main/shared.c b/src/mesa/main/shared.c
>> index c07ce82..2269476 100644
>> --- a/src/mesa/main/shared.c
>> +++ b/src/mesa/main/shared.c
>> @@ -307,9 +307,11 @@ free_shared_state(struct gl_context *ctx, struct
>> gl_shared_state *shared)
>> {
>> GLuint i;
>>
>> - /* Free the dummy/fallback texture object */
>> - if (shared->FallbackTex)
>> - ctx->Driver.DeleteTexture(ctx, shared->FallbackTex);
>> + /* Free the dummy/fallback texture objects */
>> + for (i = 0; i< NUM_TEXTURE_TARGETS; i++) {
>> + if (shared->FallbackTex[i])
>> + ctx->Driver.DeleteTexture(ctx, shared->FallbackTex[i]);
>> + }
>>
>> /*
>> * Free display lists
>> diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
>> index 1b61d3a..93a4cf6 100644
>> --- a/src/mesa/main/texobj.c
>> +++ b/src/mesa/main/texobj.c
>> @@ -759,59 +759,129 @@ _mesa_dirty_texobj(struct gl_context *ctx,
>> struct gl_texture_object *texObj,
>>
>>
>> /**
>> - * Return pointer to a default/fallback texture.
>> - * The texture is a 2D 8x8 RGBA texture with all texels = (0,0,0,1).
>> - * That's the value a sampler should get when sampling from an
>> + * Return pointer to a default/fallback texture of the given
>> type/target.
>> + * The texture is an RGBA texture with all texels = (0,0,0,1).
>> + * That's the value a GLSL sampler should get when sampling from an
>> * incomplete texture.
>> */
>> struct gl_texture_object *
>> -_mesa_get_fallback_texture(struct gl_context *ctx)
>> +_mesa_get_fallback_texture(struct gl_context *ctx, gl_texture_index
>> tex)
>> {
>> - if (!ctx->Shared->FallbackTex) {
>> + if (!ctx->Shared->FallbackTex[tex]) {
>> /* create fallback texture now */
>> - static GLubyte texels[8 * 8][4];
>> + const GLsizei width = 4, height = 4, depth = 4;
>> + GLubyte texels[width * height * depth][4];
>
> I'm not sure this builds correctly on MSVC. You might need a #define.
I thought MSVC handled the case like this where the dimensions are
const. I can change it though.
> Why 8x8 or 4x4, and not 1x1?
Probably no good reason. In the past I've occasionally ran into
glitches with 1x1 textures (esp w/ compressed textures) so in test
programs (and here) I generally try to avoid them to be extra safe.
It would simplify the code to just use 1x1 though...
> Otherwise looks good.
Thanks. I wrote this patch 6 weeks ago and had forgot about it.
-Brian
More information about the mesa-dev
mailing list