Browse Source

Merge branch 'mesa_7_5_branch'

Conflicts:

	src/mesa/main/api_validate.c
glsl-continue-return
Brian Paul 16 years ago
parent
commit
8d48222791

+ 2
- 2
progs/tests/zreaddraw.c View File

@@ -21,7 +21,7 @@ static void Display(void)
GLfloat min, max;
int i;

glClearColor(0.5, 0.5, 0.5, 0);
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

/* draw a sphere */
@@ -82,7 +82,7 @@ static void Key(unsigned char key, int x, int y)

static void Init(void)
{
const GLfloat blue[4] = {.1, .1, 1.0, 0.0};
const GLfloat blue[4] = {.1, .1, 1.0, 1.0};
const GLfloat gray[4] = {0.2, 0.2, 0.2, 1.0};
const GLfloat white[4] = {1.0, 1.0, 1.0, 1.0};
const GLfloat pos[4] = {0, 0, 10, 0};

+ 18
- 15
progs/wgl/wglthreads/wglthreads.c View File

@@ -72,6 +72,7 @@ struct winthread {
int WinWidth, WinHeight;
GLboolean NewSize;
HANDLE hEventInitialised;
GLboolean Initialized;
GLboolean MakeNewTexture;
HANDLE hEventRedraw;
};
@@ -114,20 +115,20 @@ static void
MakeNewTexture(struct winthread *wt)
{
#define TEX_SIZE 128
static float step = 0.0;
static float step = 0.0f;
GLfloat image[TEX_SIZE][TEX_SIZE][4];
GLint width;
int i, j;

for (j = 0; j < TEX_SIZE; j++) {
for (i = 0; i < TEX_SIZE; i++) {
float dt = 5.0 * (j - 0.5 * TEX_SIZE) / TEX_SIZE;
float ds = 5.0 * (i - 0.5 * TEX_SIZE) / TEX_SIZE;
float dt = 5.0f * (j - 0.5f * TEX_SIZE) / TEX_SIZE;
float ds = 5.0f * (i - 0.5f * TEX_SIZE) / TEX_SIZE;
float r = dt * dt + ds * ds + step;
image[j][i][0] =
image[j][i][1] =
image[j][i][2] = 0.75 + 0.25 * cos(r);
image[j][i][3] = 1.0;
image[j][i][2] = 0.75f + 0.25f * (float) cos(r);
image[j][i][3] = 1.0f;
}
}

@@ -159,7 +160,7 @@ static void
draw_object(void)
{
glPushMatrix();
glScalef(0.75, 0.75, 0.75);
glScalef(0.75f, 0.75f, 0.75f);

glColor3f(1, 0, 0);

@@ -288,6 +289,15 @@ draw_loop(struct winthread *wt)

wglMakeCurrent(wt->hDC, wt->Context);

if (!wt->Initialized) {
printf("wglthreads: %d: GL_RENDERER = %s\n", wt->Index,
(char *) glGetString(GL_RENDERER));
if (Texture /*&& wt->Index == 0*/) {
MakeNewTexture(wt);
}
wt->Initialized = GL_TRUE;
}

if (Locking)
LeaveCriticalSection(&Mutex);

@@ -315,7 +325,7 @@ draw_loop(struct winthread *wt)
glPushMatrix();
glRotatef(wt->Angle, 0, 1, 0);
glRotatef(wt->Angle, 1, 0, 0);
glScalef(0.7, 0.7, 0.7);
glScalef(0.7f, 0.7f, 0.7f);
draw_object();
glPopMatrix();

@@ -482,14 +492,6 @@ create_window(struct winthread *wt, HGLRC shareCtx)
wt->WinWidth = width;
wt->WinHeight = height;
wt->NewSize = GL_TRUE;

wglMakeCurrent(hdc, ctx);
printf("wglthreads: %d: GL_RENDERER = %s\n", wt->Index, (char *) glGetString(GL_RENDERER));
wglMakeCurrent(NULL, NULL);

if (Texture/* && wt->Index == 0*/) {
MakeNewTexture(wt);
}
}


@@ -539,6 +541,7 @@ main(int argc, char *argv[])
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-h") == 0) {
usage();
exit(0);
}
else if (strcmp(argv[i], "-l") == 0) {
Locking = 1;

+ 3
- 3
src/gallium/auxiliary/rtasm/rtasm_ppc.c View File

@@ -168,7 +168,7 @@ ppc_allocate_register(struct ppc_function *p)
{
unsigned i;
for (i = 0; i < PPC_NUM_REGS; i++) {
const uint64_t mask = 1 << i;
const uint32_t mask = 1 << i;
if ((p->reg_used & mask) == 0) {
p->reg_used |= mask;
return i;
@@ -200,7 +200,7 @@ ppc_allocate_fp_register(struct ppc_function *p)
{
unsigned i;
for (i = 0; i < PPC_NUM_FP_REGS; i++) {
const uint64_t mask = 1 << i;
const uint32_t mask = 1 << i;
if ((p->fp_used & mask) == 0) {
p->fp_used |= mask;
return i;
@@ -232,7 +232,7 @@ ppc_allocate_vec_register(struct ppc_function *p)
{
unsigned i;
for (i = 0; i < PPC_NUM_VEC_REGS; i++) {
const uint64_t mask = 1 << i;
const uint32_t mask = 1 << i;
if ((p->vec_used & mask) == 0) {
p->vec_used |= mask;
return i;

+ 16
- 0
src/gallium/drivers/softpipe/sp_context.c View File

@@ -126,6 +126,22 @@ softpipe_is_texture_referenced( struct pipe_context *pipe,
struct pipe_texture *texture,
unsigned face, unsigned level)
{
struct softpipe_context *softpipe = softpipe_context( pipe );
unsigned i;

if(softpipe->dirty_render_cache) {
for (i = 0; i < softpipe->framebuffer.nr_cbufs; i++) {
if(softpipe->framebuffer.cbufs[i] &&
softpipe->framebuffer.cbufs[i]->texture == texture)
return PIPE_REFERENCED_FOR_WRITE;
}
if(softpipe->framebuffer.zsbuf &&
softpipe->framebuffer.zsbuf->texture == texture)
return PIPE_REFERENCED_FOR_WRITE;
}
/* FIXME: we also need to do the same for the texture cache */
return PIPE_UNREFERENCED;
}


+ 2
- 0
src/gallium/drivers/softpipe/sp_context.h View File

@@ -145,6 +145,8 @@ struct softpipe_context {
struct draw_stage *vbuf;
struct softpipe_vbuf_render *vbuf_render;

boolean dirty_render_cache;
struct softpipe_tile_cache *cbuf_cache[PIPE_MAX_COLOR_BUFS];
struct softpipe_tile_cache *zsbuf_cache;


+ 2
- 0
src/gallium/drivers/softpipe/sp_draw_arrays.c View File

@@ -182,6 +182,8 @@ softpipe_draw_range_elements(struct pipe_context *pipe,
/* Note: leave drawing surfaces mapped */
softpipe_unmap_constant_buffers(sp);

sp->dirty_render_cache = TRUE;
return TRUE;
}


+ 2
- 0
src/gallium/drivers/softpipe/sp_flush.c View File

@@ -71,6 +71,8 @@ softpipe_flush( struct pipe_context *pipe,
* to unmap surfaces when flushing.
*/
softpipe_unmap_transfers(softpipe);
softpipe->dirty_render_cache = FALSE;
}

/* Enable to dump BMPs of the color/depth buffers each frame */

+ 6
- 3
src/gallium/drivers/softpipe/sp_setup.c View File

@@ -444,7 +444,8 @@ static void flush_spans( struct setup_context *setup )
mask |= MASK_TOP_RIGHT;
if (x+1 >= xleft1 && x+1 < xright1)
mask |= MASK_BOTTOM_RIGHT;
EMIT_QUAD( setup, x, setup->span.y, mask );
if (mask)
EMIT_QUAD( setup, x, setup->span.y, mask );
}
break;

@@ -458,7 +459,8 @@ static void flush_spans( struct setup_context *setup )
mask |= MASK_TOP_LEFT;
if (x+1 >= xleft0 && x+1 < xright0)
mask |= MASK_TOP_RIGHT;
EMIT_QUAD( setup, x, setup->span.y, mask );
if (mask)
EMIT_QUAD( setup, x, setup->span.y, mask );
}
break;

@@ -472,7 +474,8 @@ static void flush_spans( struct setup_context *setup )
mask |= MASK_BOTTOM_LEFT;
if (x+1 >= xleft1 && x+1 < xright1)
mask |= MASK_BOTTOM_RIGHT;
EMIT_QUAD( setup, x, setup->span.y, mask );
if (mask)
EMIT_QUAD( setup, x, setup->span.y, mask );
}
break;


+ 14
- 14
src/gallium/include/pipe/p_refcnt.h View File

@@ -62,29 +62,29 @@ pipe_is_referenced(struct pipe_reference *reference)
* Set 'ptr' to point to 'reference' and update reference counting.
* The old thing pointed to, if any, will be unreferenced first.
* 'reference' may be NULL.
*
* XXX: thread safety issues!
*/
static INLINE bool
pipe_reference(struct pipe_reference **ptr, struct pipe_reference *reference)
{
bool destroy = FALSE;

/* bump the reference.count first */
if (reference) {
assert(pipe_is_referenced(reference));
p_atomic_inc(&reference->count);
}

if (*ptr) {
assert(pipe_is_referenced(*ptr));
if (p_atomic_dec_zero(&(*ptr)->count)) {
destroy = TRUE;
if(*ptr != reference) {
/* bump the reference.count first */
if (reference) {
assert(pipe_is_referenced(reference));
p_atomic_inc(&reference->count);
}
if (*ptr) {
assert(pipe_is_referenced(*ptr));
if (p_atomic_dec_zero(&(*ptr)->count)) {
destroy = TRUE;
}
}
*ptr = reference;
}

*ptr = reference;

return destroy;
}


+ 1
- 0
src/gallium/include/pipe/p_thread.h View File

@@ -36,6 +36,7 @@


#include "pipe/p_compiler.h"
#include "util/u_debug.h" /* for assert */


#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_OS_SOLARIS)

+ 8
- 0
src/gallium/state_trackers/python/tests/base.py View File

@@ -46,6 +46,14 @@ for name, value in globals().items():
if name.startswith("PIPE_FORMAT_") and isinstance(value, int):
formats[value] = name

def is_depth_stencil_format(format):
# FIXME: make and use binding to pf_is_depth_stencil
return format in (
PIPE_FORMAT_Z32_UNORM,
PIPE_FORMAT_Z24S8_UNORM,
PIPE_FORMAT_Z24X8_UNORM,
PIPE_FORMAT_Z16_UNORM,
)

def make_image(width, height, rgba):
import Image

+ 32
- 18
src/gallium/state_trackers/python/tests/texture_sample.py View File

@@ -497,17 +497,13 @@ def main():
PIPE_TEXTURE_3D,
]
formats = [
color_formats = [
PIPE_FORMAT_A8R8G8B8_UNORM,
PIPE_FORMAT_X8R8G8B8_UNORM,
#PIPE_FORMAT_A8R8G8B8_SRGB,
PIPE_FORMAT_R5G6B5_UNORM,
PIPE_FORMAT_A1R5G5B5_UNORM,
PIPE_FORMAT_A4R4G4B4_UNORM,
PIPE_FORMAT_Z32_UNORM,
PIPE_FORMAT_Z24S8_UNORM,
PIPE_FORMAT_Z24X8_UNORM,
PIPE_FORMAT_Z16_UNORM,
PIPE_FORMAT_A8_UNORM,
PIPE_FORMAT_L8_UNORM,
PIPE_FORMAT_YCBCR,
@@ -517,6 +513,13 @@ def main():
#PIPE_FORMAT_DXT5_RGBA,
]
depth_formats = [
PIPE_FORMAT_Z32_UNORM,
PIPE_FORMAT_Z24S8_UNORM,
PIPE_FORMAT_Z24X8_UNORM,
PIPE_FORMAT_Z16_UNORM,
]
sizes = [64, 32, 16, 8, 4, 2, 1]
#sizes = [1020, 508, 252, 62, 30, 14, 6, 3]
#sizes = [64]
@@ -531,8 +534,8 @@ def main():
PIPE_TEX_FACE_NEG_Z,
]

for target in targets:
for format in formats:
for format in color_formats:
for target in targets:
for size in sizes:
if target == PIPE_TEXTURE_3D:
depth = size
@@ -546,17 +549,7 @@ def main():
for level in range(0, last_level + 1):
zslice = 0
while zslice < depth >> level:
if format in (
PIPE_FORMAT_Z32_UNORM,
PIPE_FORMAT_Z24S8_UNORM,
PIPE_FORMAT_Z24X8_UNORM,
PIPE_FORMAT_Z16_UNORM,
):
klass = TextureDepthSampleTest
else:
klass = TextureColorSampleTest

test = klass(
test = TextureColorSampleTest(
dev = dev,
target = target,
format = format,
@@ -570,6 +563,27 @@ def main():
)
suite.add_test(test)
zslice = (zslice + 1)*2 - 1
for format in depth_formats:
target = PIPE_TEXTURE_2D
depth = 1
face = 0
last_level = 0
level = 0
zslice = 0
for size in sizes:
test = TextureDepthSampleTest(
dev = dev,
target = target,
format = format,
width = size,
height = size,
depth = depth,
last_level = last_level,
face = face,
level = level,
zslice = zslice,
)
suite.add_test(test)
suite.run()



+ 3
- 2
src/mesa/drivers/dri/i965/brw_context.h View File

@@ -614,9 +614,10 @@ struct brw_context
struct brw_wm_prog_data *prog_data;
struct brw_wm_compile *compile_data;

/* Input sizes, calculated from active vertex program:
/** Input sizes, calculated from active vertex program.
* One bit per fragment program input attribute.
*/
GLuint input_size_masks[4];
GLbitfield input_size_masks[4];

/** Array of surface default colors (texture border color) */
dri_bo *sdc_bo[BRW_MAX_TEX_UNIT];

+ 33
- 11
src/mesa/drivers/dri/i965/brw_vs_constval.c View File

@@ -39,8 +39,8 @@
*/
struct tracker {
GLboolean twoside;
GLubyte active[PROGRAM_OUTPUT+1][128];
GLuint size_masks[4];
GLubyte active[PROGRAM_OUTPUT+1][MAX_PROGRAM_TEMPS];
GLbitfield size_masks[4]; /**< one bit per fragment program input attrib */
};


@@ -53,8 +53,10 @@ static void set_active_component( struct tracker *t,
case PROGRAM_TEMPORARY:
case PROGRAM_INPUT:
case PROGRAM_OUTPUT:
assert(file < PROGRAM_OUTPUT + 1);
assert(index < Elements(t->active[0]));
t->active[file][index] |= active;

break;
default:
break;
}
@@ -108,10 +110,15 @@ static GLubyte get_active( struct tracker *t,
return active;
}

/**
* Return the size (1,2,3 or 4) of the output/result for VERT_RESULT_idx.
*/
static GLubyte get_output_size( struct tracker *t,
GLuint idx )
{
GLubyte active = t->active[PROGRAM_OUTPUT][idx];
GLubyte active;
assert(idx < VERT_RESULT_MAX);
active = t->active[PROGRAM_OUTPUT][idx];
if (active & (1<<3)) return 4;
if (active & (1<<2)) return 3;
if (active & (1<<1)) return 2;
@@ -123,7 +130,7 @@ static GLubyte get_output_size( struct tracker *t,
*/
static void calc_sizes( struct tracker *t )
{
GLuint i;
GLint vertRes;

if (t->twoside) {
t->active[PROGRAM_OUTPUT][VERT_RESULT_COL0] |=
@@ -133,12 +140,27 @@ static void calc_sizes( struct tracker *t )
t->active[PROGRAM_OUTPUT][VERT_RESULT_BFC1];
}

for (i = 0; i < FRAG_ATTRIB_MAX; i++) {
switch (get_output_size(t, i)) {
case 4: t->size_masks[4-1] |= 1<<i;
case 3: t->size_masks[3-1] |= 1<<i;
case 2: t->size_masks[2-1] |= 1<<i;
case 1: t->size_masks[1-1] |= 1<<i;
/* Examine vertex program output sizes to set the size_masks[] info
* which describes the fragment program input sizes.
*/
for (vertRes = VERT_RESULT_TEX0; vertRes < VERT_RESULT_MAX; vertRes++) {
GLint fragAttrib;

/* map vertex program output index to fragment program input index */
if (vertRes <= VERT_RESULT_TEX7)
fragAttrib = FRAG_ATTRIB_TEX0 + vertRes - VERT_RESULT_TEX0;
else if (vertRes >= VERT_RESULT_VAR0)
fragAttrib = FRAG_ATTRIB_VAR0 + vertRes - VERT_RESULT_VAR0;
else
continue;
assert(fragAttrib >= FRAG_ATTRIB_TEX0);
assert(fragAttrib <= FRAG_ATTRIB_MAX);

switch (get_output_size(t, vertRes)) {
case 4: t->size_masks[4-1] |= 1 << fragAttrib;
case 3: t->size_masks[3-1] |= 1 << fragAttrib;
case 2: t->size_masks[2-1] |= 1 << fragAttrib;
case 1: t->size_masks[1-1] |= 1 << fragAttrib;
break;
}
}

+ 1
- 1
src/mesa/drivers/dri/i965/brw_wm.c View File

@@ -267,7 +267,7 @@ static void brw_wm_populate_key( struct brw_context *brw,


/* BRW_NEW_WM_INPUT_DIMENSIONS */
key->projtex_mask = brw->wm.input_size_masks[4-1] >> (FRAG_ATTRIB_TEX0 - FRAG_ATTRIB_WPOS);
key->proj_attrib_mask = brw->wm.input_size_masks[4-1];

/* _NEW_LIGHT */
key->flat_shade = (ctx->Light.ShadeModel == GL_FLAT);

+ 1
- 1
src/mesa/drivers/dri/i965/brw_wm.h View File

@@ -66,7 +66,7 @@ struct brw_wm_prog_key {
GLuint linear_color:1; /**< linear interpolation vs perspective interp */
GLuint runtime_check_aads_emit:1;
GLuint projtex_mask:16;
GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */
GLuint shadowtex_mask:16;
GLuint yuvtex_mask:16;
GLuint yuvtex_swap_mask:16; /* UV swaped */

+ 16
- 5
src/mesa/drivers/dri/i965/brw_wm_fp.c View File

@@ -846,10 +846,16 @@ static void precalc_tex( struct brw_wm_compile *c,
}


/**
* Check if the given TXP instruction really needs the divide-by-W step.
*/
static GLboolean projtex( struct brw_wm_compile *c,
const struct prog_instruction *inst )
{
struct prog_src_register src = inst->SrcReg[0];
const struct prog_src_register src = inst->SrcReg[0];
GLboolean retVal;

assert(inst->Opcode == OPCODE_TXP);

/* Only try to detect the simplest cases. Could detect (later)
* cases where we are trying to emit code like RCP {1.0}, MUL x,
@@ -859,16 +865,21 @@ static GLboolean projtex( struct brw_wm_compile *c,
* user-provided fragment programs anyway:
*/
if (inst->TexSrcTarget == TEXTURE_CUBE_INDEX)
return 0; /* ut2004 gun rendering !?! */
retVal = GL_FALSE; /* ut2004 gun rendering !?! */
else if (src.File == PROGRAM_INPUT &&
GET_SWZ(src.Swizzle, W) == W &&
(c->key.projtex_mask & (1<<(src.Index + FRAG_ATTRIB_WPOS - FRAG_ATTRIB_TEX0))) == 0)
return 0;
(c->key.proj_attrib_mask & (1 << src.Index)) == 0)
retVal = GL_FALSE;
else
return 1;
retVal = GL_TRUE;

return retVal;
}


/**
* Emit code for TXP.
*/
static void precalc_txp( struct brw_wm_compile *c,
const struct prog_instruction *inst )
{

+ 24
- 0
src/mesa/drivers/dri/intel/intel_screen.c View File

@@ -410,6 +410,30 @@ intelCreateBuffer(__DRIscreenPrivate * driScrnPriv,
static void
intelDestroyBuffer(__DRIdrawablePrivate * driDrawPriv)
{
struct intel_framebuffer *intel_fb = driDrawPriv->driverPrivate;
struct intel_renderbuffer *depth_rb;
struct intel_renderbuffer *stencil_rb;

if (intel_fb) {
if (intel_fb->color_rb[0]) {
intel_renderbuffer_set_region(intel_fb->color_rb[0], NULL);
}

if (intel_fb->color_rb[1]) {
intel_renderbuffer_set_region(intel_fb->color_rb[1], NULL);
}

depth_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_DEPTH);
if (depth_rb) {
intel_renderbuffer_set_region(depth_rb, NULL);
}

stencil_rb = intel_get_renderbuffer(&intel_fb->Base, BUFFER_STENCIL);
if (stencil_rb) {
intel_renderbuffer_set_region(stencil_rb, NULL);
}
}

_mesa_reference_framebuffer((GLframebuffer **)(&(driDrawPriv->driverPrivate)), NULL);
}


+ 1
- 1
src/mesa/main/api_validate.c View File

@@ -60,7 +60,7 @@ max_buffer_index(GLcontext *ctx, GLuint count, GLenum type,
{
const GLubyte *map = NULL;
GLuint max = 0;
GLint i;
GLuint i;

if (elementBuf->Name) {
/* elements are in a user-defined buffer object. need to map it */

+ 7
- 7
src/mesa/main/macros.h View File

@@ -55,7 +55,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];


/** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0], texture/fb data */
#define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0 : (B) * (1.0F/127.0F))
#define BYTE_TO_FLOAT_TEX(B) ((B) == -128 ? -1.0F : (B) * (1.0F/127.0F))

/** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127], texture/fb data */
#define FLOAT_TO_BYTE_TEX(X) ( (GLint) (127.0F * (X)) )
@@ -65,7 +65,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
#define USHORT_TO_FLOAT(S) ((GLfloat) (S) * (1.0F / 65535.0F))

/** Convert GLfloat in [0.0,1.0] to GLushort in [0, 65535] */
#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0))
#define FLOAT_TO_USHORT(X) ((GLuint) ((X) * 65535.0F))


/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */
@@ -76,7 +76,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];


/** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0], texture/fb data */
#define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0 : (S) * (1.0F/32767.0F))
#define SHORT_TO_FLOAT_TEX(S) ((S) == -32768 ? -1.0F : (S) * (1.0F/32767.0F))

/** Convert GLfloat in [-1.0,1.0] to GLshort in [-32768,32767], texture/fb data */
#define FLOAT_TO_SHORT_TEX(X) ( (GLint) (32767.0F * (X)) )
@@ -86,7 +86,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
#define UINT_TO_FLOAT(U) ((GLfloat) (U) * (1.0F / 4294967295.0F))

/** Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */
#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0))
#define FLOAT_TO_UINT(X) ((GLuint) ((X) * 4294967295.0F))


/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */
@@ -97,11 +97,11 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
#define FLOAT_TO_INT(X) ( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
*/
/* a close approximation: */
#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0 * (X)) )
#define FLOAT_TO_INT(X) ( (GLint) (2147483647.0F * (X)) )


/** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0], texture/fb data */
#define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0 : (I) * (1.0F/2147483647.0))
#define INT_TO_FLOAT_TEX(I) ((I) == -2147483648 ? -1.0F : (I) * (1.0F/2147483647.0F))

/** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647], texture/fb data */
#define FLOAT_TO_INT_TEX(X) ( (GLint) (2147483647.0F * (X)) )
@@ -120,7 +120,7 @@ extern GLfloat _mesa_ubyte_to_float_color_tab[256];
#define INT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 15)))
#define UINT_TO_USHORT(i) ((i) < 0 ? 0 : ((GLushort) ((i) >> 16)))
#define UNCLAMPED_FLOAT_TO_USHORT(us, f) \
us = ( (GLushort) IROUND( CLAMP((f), 0.0, 1.0) * 65535.0F) )
us = ( (GLushort) IROUND( CLAMP((f), 0.0F, 1.0F) * 65535.0F) )
#define CLAMPED_FLOAT_TO_USHORT(us, f) \
us = ( (GLushort) IROUND( (f) * 65535.0F) )


+ 2
- 2
src/mesa/main/texenv.c View File

@@ -959,7 +959,7 @@ void GLAPIENTRY
_mesa_GetTexBumpParameterivATI( GLenum pname, GLint *param )
{
const struct gl_texture_unit *texUnit;
GLint i;
GLuint i;
GLint temp = 0;
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END(ctx);
@@ -1006,7 +1006,7 @@ void GLAPIENTRY
_mesa_GetTexBumpParameterfvATI( GLenum pname, GLfloat *param )
{
const struct gl_texture_unit *texUnit;
GLint i;
GLuint i;
GLint temp = 0;
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END(ctx);

+ 1
- 0
src/mesa/main/texenvprogram.c View File

@@ -877,6 +877,7 @@ static struct ureg get_source( struct texenv_fragment_program *p,

default:
assert(0);
return undef;
}
}


+ 14
- 14
src/mesa/main/texformat_tmp.h View File

@@ -1347,13 +1347,13 @@ static void FETCH(f_ycbcr)( const struct gl_texture_image *texImage,
const GLubyte cb = *src0 & 0xff; /* chroma U */
const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */
const GLubyte cr = *src1 & 0xff; /* chroma V */
const GLfloat y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
GLfloat r = 1.164 * (y - 16) + 1.596 * (cr - 128);
GLfloat g = 1.164 * (y - 16) - 0.813 * (cr - 128) - 0.391 * (cb - 128);
GLfloat b = 1.164 * (y - 16) + 2.018 * (cb - 128);
r *= (1.0 / 255.0F);
g *= (1.0 / 255.0F);
b *= (1.0 / 255.0F);
const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128);
GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128);
GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128);
r *= (1.0F / 255.0F);
g *= (1.0F / 255.0F);
b *= (1.0F / 255.0F);
texel[RCOMP] = CLAMP(r, 0.0F, 1.0F);
texel[GCOMP] = CLAMP(g, 0.0F, 1.0F);
texel[BCOMP] = CLAMP(b, 0.0F, 1.0F);
@@ -1388,13 +1388,13 @@ static void FETCH(f_ycbcr_rev)( const struct gl_texture_image *texImage,
const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */
const GLubyte y1 = *src1 & 0xff; /* luminance */
const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */
const GLfloat y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
GLfloat r = 1.164 * (y - 16) + 1.596 * (cr - 128);
GLfloat g = 1.164 * (y - 16) - 0.813 * (cr - 128) - 0.391 * (cb - 128);
GLfloat b = 1.164 * (y - 16) + 2.018 * (cb - 128);
r *= (1.0 / 255.0F);
g *= (1.0 / 255.0F);
b *= (1.0 / 255.0F);
const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */
GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128);
GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128);
GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128);
r *= (1.0F / 255.0F);
g *= (1.0F / 255.0F);
b *= (1.0F / 255.0F);
texel[RCOMP] = CLAMP(r, 0.0F, 1.0F);
texel[GCOMP] = CLAMP(g, 0.0F, 1.0F);
texel[BCOMP] = CLAMP(b, 0.0F, 1.0F);

+ 3
- 3
src/mesa/main/texgetimage.c View File

@@ -73,11 +73,11 @@ linear_to_nonlinear(GLfloat cl)
{
/* can't have values outside [0, 1] */
GLfloat cs;
if (cl < 0.0031308) {
cs = 12.92 * cl;
if (cl < 0.0031308f) {
cs = 12.92f * cl;
}
else {
cs = 1.055 * _mesa_pow(cl, 0.41666) - 0.055;
cs = (GLfloat)(1.055 * _mesa_pow(cl, 0.41666) - 0.055);
}
return cs;
}

+ 2
- 2
src/mesa/main/viewport.c View File

@@ -73,8 +73,8 @@ _mesa_set_viewport(GLcontext *ctx, GLint x, GLint y,
}

/* clamp width and height to the implementation dependent range */
width = CLAMP(width, 1, (GLsizei) ctx->Const.MaxViewportWidth);
height = CLAMP(height, 1, (GLsizei) ctx->Const.MaxViewportHeight);
width = MIN2(width, (GLsizei) ctx->Const.MaxViewportWidth);
height = MIN2(height, (GLsizei) ctx->Const.MaxViewportHeight);

ctx->Viewport.X = x;
ctx->Viewport.Width = width;

+ 1
- 1
src/mesa/swrast/s_texfilter.c View File

@@ -138,7 +138,7 @@ lerp_rgba_3d(GLfloat result[4], GLfloat a, GLfloat b, GLfloat c,
* If A is a signed integer, A % B doesn't give the right value for A < 0
* (in terms of texture repeat). Just casting to unsigned fixes that.
*/
#define REMAINDER(A, B) ((unsigned) (A) % (unsigned) (B))
#define REMAINDER(A, B) (((A) + (B) * 1024) % (B))


/**

Loading…
Cancel
Save