rebase to 8.0.4 release + 8.0 branch fixes
This commit is contained in:
parent
2aab46f3c9
commit
0cbff147e5
|
@ -35,3 +35,4 @@ mesa-20100720.tar.bz2
|
|||
/MesaLib-8.0.1.tar.bz2
|
||||
/MesaLib-8.0.2.tar.bz2
|
||||
/MesaLib-8.0.3.tar.bz2
|
||||
/MesaLib-8.0.4.tar.bz2
|
||||
|
|
|
@ -1,265 +0,0 @@
|
|||
diff --git a/docs/relnotes-8.0.1.html b/docs/relnotes-8.0.1.html
|
||||
index 8c8cd3f..29a314c 100644
|
||||
--- a/docs/relnotes-8.0.1.html
|
||||
+++ b/docs/relnotes-8.0.1.html
|
||||
@@ -28,7 +28,9 @@ for DRI hardware acceleration.
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
-tdb
|
||||
+4855c2d93bd2ebd43f384bdcc92c9a27 MesaLib-8.0.1.tar.gz
|
||||
+24eeebf66971809d8f40775a379b36c9 MesaLib-8.0.1.tar.bz2
|
||||
+54e745d14dac5717f7f65b4e2d5c1df2 MesaLib-8.0.1.zip
|
||||
</pre>
|
||||
|
||||
<h2>New features</h2>
|
||||
diff --git a/src/gallium/auxiliary/rtasm/rtasm_cpu.c b/src/gallium/auxiliary/rtasm/rtasm_cpu.c
|
||||
index 0461c81..7afcf14 100644
|
||||
--- a/src/gallium/auxiliary/rtasm/rtasm_cpu.c
|
||||
+++ b/src/gallium/auxiliary/rtasm/rtasm_cpu.c
|
||||
@@ -25,43 +25,43 @@
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
+#include "pipe/p_config.h"
|
||||
+#include "rtasm_cpu.h"
|
||||
+
|
||||
+#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
|
||||
|
||||
#include "util/u_debug.h"
|
||||
-#include "rtasm_cpu.h"
|
||||
+#include "util/u_cpu_detect.h"
|
||||
|
||||
+DEBUG_GET_ONCE_BOOL_OPTION(nosse, "GALLIUM_NOSSE", FALSE);
|
||||
|
||||
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
|
||||
-static boolean rtasm_sse_enabled(void)
|
||||
+static struct util_cpu_caps *get_cpu_caps(void)
|
||||
{
|
||||
- static boolean firsttime = 1;
|
||||
- static boolean enabled;
|
||||
-
|
||||
- /* This gets called quite often at the moment:
|
||||
- */
|
||||
- if (firsttime) {
|
||||
- enabled = !debug_get_bool_option("GALLIUM_NOSSE", FALSE);
|
||||
- firsttime = FALSE;
|
||||
- }
|
||||
- return enabled;
|
||||
+ util_cpu_detect();
|
||||
+ return &util_cpu_caps;
|
||||
}
|
||||
-#endif
|
||||
|
||||
int rtasm_cpu_has_sse(void)
|
||||
{
|
||||
- /* FIXME: actually detect this at run-time */
|
||||
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
|
||||
- return rtasm_sse_enabled();
|
||||
-#else
|
||||
- return 0;
|
||||
-#endif
|
||||
+ return !debug_get_option_nosse() && get_cpu_caps()->has_sse;
|
||||
}
|
||||
|
||||
int rtasm_cpu_has_sse2(void)
|
||||
{
|
||||
- /* FIXME: actually detect this at run-time */
|
||||
-#if defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)
|
||||
- return rtasm_sse_enabled();
|
||||
+ return !debug_get_option_nosse() && get_cpu_caps()->has_sse2;
|
||||
+}
|
||||
+
|
||||
+
|
||||
#else
|
||||
+
|
||||
+int rtasm_cpu_has_sse(void)
|
||||
+{
|
||||
return 0;
|
||||
-#endif
|
||||
}
|
||||
+
|
||||
+int rtasm_cpu_has_sse2(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
diff --git a/src/gallium/drivers/r300/compiler/radeon_program_alu.c b/src/gallium/drivers/r300/compiler/radeon_program_alu.c
|
||||
index dd1dfb3..c48f936 100644
|
||||
--- a/src/gallium/drivers/r300/compiler/radeon_program_alu.c
|
||||
+++ b/src/gallium/drivers/r300/compiler/radeon_program_alu.c
|
||||
@@ -1165,35 +1165,79 @@ int radeonTransformDeriv(struct radeon_compiler* c,
|
||||
}
|
||||
|
||||
/**
|
||||
+ * IF Temp[0].x -> IF Temp[0].x
|
||||
+ * ... -> ...
|
||||
+ * KILP -> KIL -abs(Temp[0].x)
|
||||
+ * ... -> ...
|
||||
+ * ENDIF -> ENDIF
|
||||
+ *
|
||||
+ * === OR ===
|
||||
+ *
|
||||
* IF Temp[0].x -\
|
||||
* KILP - > KIL -abs(Temp[0].x)
|
||||
* ENDIF -/
|
||||
*
|
||||
- * This needs to be done in its own pass, because it modifies the instructions
|
||||
- * before and after KILP.
|
||||
+ * === OR ===
|
||||
+ *
|
||||
+ * IF Temp[0].x -> IF Temp[0].x
|
||||
+ * ... -> ...
|
||||
+ * ELSE -> ELSE
|
||||
+ * ... -> ...
|
||||
+ * KILP -> KIL -abs(Temp[0].x)
|
||||
+ * ... -> ...
|
||||
+ * ENDIF -> ENDIF
|
||||
+ *
|
||||
+ * === OR ===
|
||||
+ *
|
||||
+ * KILP -> KIL -none.1111
|
||||
+ *
|
||||
+ * This needs to be done in its own pass, because it might modify the
|
||||
+ * instructions before and after KILP.
|
||||
*/
|
||||
void rc_transform_KILP(struct radeon_compiler * c, void *user)
|
||||
{
|
||||
struct rc_instruction * inst;
|
||||
for (inst = c->Program.Instructions.Next;
|
||||
inst != &c->Program.Instructions; inst = inst->Next) {
|
||||
+ struct rc_instruction * if_inst;
|
||||
+ unsigned in_if = 0;
|
||||
|
||||
if (inst->U.I.Opcode != RC_OPCODE_KILP)
|
||||
continue;
|
||||
|
||||
+ for (if_inst = inst->Prev; if_inst != &c->Program.Instructions;
|
||||
+ if_inst = if_inst->Prev) {
|
||||
+
|
||||
+ if (if_inst->U.I.Opcode == RC_OPCODE_IF) {
|
||||
+ in_if = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
inst->U.I.Opcode = RC_OPCODE_KIL;
|
||||
|
||||
- if (inst->Prev->U.I.Opcode != RC_OPCODE_IF
|
||||
- || inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
|
||||
+ if (!in_if) {
|
||||
inst->U.I.SrcReg[0] = negate(builtin_one);
|
||||
} else {
|
||||
-
|
||||
+ /* This should work even if the KILP is inside the ELSE
|
||||
+ * block, because -0.0 is considered negative. */
|
||||
inst->U.I.SrcReg[0] =
|
||||
- negate(absolute(inst->Prev->U.I.SrcReg[0]));
|
||||
- /* Remove IF */
|
||||
- rc_remove_instruction(inst->Prev);
|
||||
- /* Remove ENDIF */
|
||||
- rc_remove_instruction(inst->Next);
|
||||
+ negate(absolute(if_inst->U.I.SrcReg[0]));
|
||||
+
|
||||
+ if (inst->Prev->U.I.Opcode != RC_OPCODE_IF
|
||||
+ && inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
|
||||
+
|
||||
+ /* Optimize the special case:
|
||||
+ * IF Temp[0].x
|
||||
+ * KILP
|
||||
+ * ENDIF
|
||||
+ */
|
||||
+
|
||||
+ /* Remove IF */
|
||||
+ rc_remove_instruction(inst->Prev);
|
||||
+ /* Remove ENDIF */
|
||||
+ rc_remove_instruction(inst->Next);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
|
||||
index 82a3ff2..e22deb4 100644
|
||||
--- a/src/gallium/drivers/svga/svga_screen.c
|
||||
+++ b/src/gallium/drivers/svga/svga_screen.c
|
||||
@@ -235,7 +235,7 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
|
||||
case PIPE_SHADER_CAP_MAX_TEMPS:
|
||||
if (!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_FRAGMENT_SHADER_TEMPS, &result))
|
||||
return 32;
|
||||
- return result.u;
|
||||
+ return MIN2(result.u, SVGA3D_TEMPREG_MAX);
|
||||
case PIPE_SHADER_CAP_MAX_ADDRS:
|
||||
case PIPE_SHADER_CAP_INDIRECT_INPUT_ADDR:
|
||||
/*
|
||||
@@ -286,7 +286,7 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
|
||||
case PIPE_SHADER_CAP_MAX_TEMPS:
|
||||
if (!sws->get_cap(sws, SVGA3D_DEVCAP_MAX_VERTEX_SHADER_TEMPS, &result))
|
||||
return 32;
|
||||
- return result.u;
|
||||
+ return MIN2(result.u, SVGA3D_TEMPREG_MAX);
|
||||
case PIPE_SHADER_CAP_MAX_ADDRS:
|
||||
return 1;
|
||||
case PIPE_SHADER_CAP_MAX_PREDS:
|
||||
diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c
|
||||
index 3347157..b2581da 100644
|
||||
--- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
|
||||
+++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
|
||||
@@ -2188,7 +2188,7 @@ void brw_fb_WRITE(struct brw_compile *p,
|
||||
msg_type,
|
||||
msg_length,
|
||||
header_present,
|
||||
- 1, /* last render target write */
|
||||
+ eot, /* last render target write */
|
||||
response_length,
|
||||
eot,
|
||||
0 /* send_commit_msg */);
|
||||
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
|
||||
index a2959a8..4b27e06 100644
|
||||
--- a/src/mesa/main/bufferobj.c
|
||||
+++ b/src/mesa/main/bufferobj.c
|
||||
@@ -1159,17 +1159,17 @@ _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params)
|
||||
*params = _mesa_bufferobj_mapped(bufObj);
|
||||
return;
|
||||
case GL_BUFFER_ACCESS_FLAGS:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = bufObj->AccessFlags;
|
||||
return;
|
||||
case GL_BUFFER_MAP_OFFSET:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) bufObj->Offset;
|
||||
return;
|
||||
case GL_BUFFER_MAP_LENGTH:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = (GLint) bufObj->Length;
|
||||
return;
|
||||
@@ -1210,7 +1210,7 @@ _mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
|
||||
*params = simplified_access_mode(bufObj->AccessFlags);
|
||||
return;
|
||||
case GL_BUFFER_ACCESS_FLAGS:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = bufObj->AccessFlags;
|
||||
return;
|
||||
@@ -1218,12 +1218,12 @@ _mesa_GetBufferParameteri64v(GLenum target, GLenum pname, GLint64 *params)
|
||||
*params = _mesa_bufferobj_mapped(bufObj);
|
||||
return;
|
||||
case GL_BUFFER_MAP_OFFSET:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = bufObj->Offset;
|
||||
return;
|
||||
case GL_BUFFER_MAP_LENGTH:
|
||||
- if (ctx->VersionMajor < 3)
|
||||
+ if (!ctx->Extensions.ARB_map_buffer_range)
|
||||
goto invalid_pname;
|
||||
*params = bufObj->Length;
|
||||
return;
|
|
@ -1,901 +0,0 @@
|
|||
git diff-tree -p mesa-8.0.3..d715d3f4a82463a00a64d534747d80792508b97f
|
||||
|
||||
diff --git a/docs/relnotes-8.0.3.html b/docs/relnotes-8.0.3.html
|
||||
index 4e81da4..dd27bef 100644
|
||||
--- a/docs/relnotes-8.0.3.html
|
||||
+++ b/docs/relnotes-8.0.3.html
|
||||
@@ -28,7 +28,9 @@ for DRI hardware acceleration.
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
-TBD.
|
||||
+b7210a6d6e4584bd852ab29294ce717e MesaLib-8.0.3.tar.gz
|
||||
+cc5ee15e306b8c15da6a478923797171 MesaLib-8.0.3.tar.bz2
|
||||
+32773634a0f7e70a680505a81426eccf MesaLib-8.0.3.zip
|
||||
</pre>
|
||||
|
||||
<h2>New features</h2>
|
||||
diff --git a/docs/relnotes.html b/docs/relnotes.html
|
||||
index 23337cf..1bc889a 100644
|
||||
--- a/docs/relnotes.html
|
||||
+++ b/docs/relnotes.html
|
||||
@@ -13,6 +13,7 @@ The release notes summarize what's new or changed in each Mesa release.
|
||||
</p>
|
||||
|
||||
<UL>
|
||||
+<LI><A HREF="relnotes-8.0.3.html">8.0.3 release notes</A>
|
||||
<LI><A HREF="relnotes-8.0.2.html">8.0.2 release notes</A>
|
||||
<LI><A HREF="relnotes-8.0.1.html">8.0.1 release notes</A>
|
||||
<LI><A HREF="relnotes-8.0.html">8.0 release notes</A>
|
||||
diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
|
||||
index 080e03d..c098c05 100644
|
||||
--- a/src/gallium/auxiliary/draw/draw_pt.c
|
||||
+++ b/src/gallium/auxiliary/draw/draw_pt.c
|
||||
@@ -329,25 +329,28 @@ draw_pt_arrays_restart(struct draw_context *draw,
|
||||
|
||||
if (draw->pt.user.elts) {
|
||||
/* indexed prims (draw_elements) */
|
||||
+ const char *elts =
|
||||
+ (const char *) draw->pt.user.elts + draw->pt.index_buffer.offset;
|
||||
+
|
||||
cur_start = start;
|
||||
cur_count = 0;
|
||||
|
||||
switch (draw->pt.user.eltSize) {
|
||||
case 1:
|
||||
{
|
||||
- const ubyte *elt_ub = (const ubyte *) draw->pt.user.elts;
|
||||
+ const ubyte *elt_ub = (const ubyte *) elts;
|
||||
PRIM_RESTART_LOOP(elt_ub);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
- const ushort *elt_us = (const ushort *) draw->pt.user.elts;
|
||||
+ const ushort *elt_us = (const ushort *) elts;
|
||||
PRIM_RESTART_LOOP(elt_us);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
- const uint *elt_ui = (const uint *) draw->pt.user.elts;
|
||||
+ const uint *elt_ui = (const uint *) elts;
|
||||
PRIM_RESTART_LOOP(elt_ui);
|
||||
}
|
||||
break;
|
||||
diff --git a/src/gallium/drivers/nv50/nv50_pc_emit.c b/src/gallium/drivers/nv50/nv50_pc_emit.c
|
||||
index 2b177c6..30079ba 100644
|
||||
--- a/src/gallium/drivers/nv50/nv50_pc_emit.c
|
||||
+++ b/src/gallium/drivers/nv50/nv50_pc_emit.c
|
||||
@@ -865,8 +865,10 @@ emit_flop(struct nv_pc *pc, struct nv_instruction *i)
|
||||
assert(SFILE(i, 0) == NV_FILE_GPR);
|
||||
|
||||
if (!i->is_long) {
|
||||
+ assert(i->opcode == NV_OP_RCP);
|
||||
emit_form_MUL(pc, i);
|
||||
- assert(i->opcode == NV_OP_RCP && !src0->mod);
|
||||
+ if (src0->mod & NV_MOD_NEG) pc->emit[0] |= 0x00400000;
|
||||
+ if (src0->mod & NV_MOD_ABS) pc->emit[0] |= 0x00008000;
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/src/gallium/drivers/svga/svga_surface.c b/src/gallium/drivers/svga/svga_surface.c
|
||||
index 2f9379b..942c0ee 100644
|
||||
--- a/src/gallium/drivers/svga/svga_surface.c
|
||||
+++ b/src/gallium/drivers/svga/svga_surface.c
|
||||
@@ -320,6 +320,11 @@ svga_mark_surface_dirty(struct pipe_surface *surf)
|
||||
else {
|
||||
/* this will happen later in svga_propagate_surface */
|
||||
}
|
||||
+
|
||||
+ /* Increment the view_age and texture age for this surface's slice
|
||||
+ * so that any sampler views into the texture are re-validated too.
|
||||
+ */
|
||||
+ tex->view_age[surf->u.tex.first_layer] = ++(tex->age);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/gallium/state_trackers/vega/vg_translate.c b/src/gallium/state_trackers/vega/vg_translate.c
|
||||
index 06cc003..7b3df27 100644
|
||||
--- a/src/gallium/state_trackers/vega/vg_translate.c
|
||||
+++ b/src/gallium/state_trackers/vega/vg_translate.c
|
||||
@@ -526,8 +526,8 @@ void _vega_unpack_float_span_rgba(struct vg_context *ctx,
|
||||
src += offset;
|
||||
for (i = 0; i < n; ++i) {
|
||||
VGfloat clr[4];
|
||||
- clr[0] = ((*src >> 10) & 31)/31.;
|
||||
- clr[1] = ((*src >> 5) & 95)/95.;
|
||||
+ clr[0] = ((*src >> 11) & 31)/31.;
|
||||
+ clr[1] = ((*src >> 5) & 63)/63.;
|
||||
clr[2] = ((*src >> 0) & 31)/31.;
|
||||
clr[3] = 1.f;
|
||||
|
||||
diff --git a/src/mesa/drivers/dri/i965/brw_eu.c b/src/mesa/drivers/dri/i965/brw_eu.c
|
||||
index 2b0593a..75a4205 100644
|
||||
--- a/src/mesa/drivers/dri/i965/brw_eu.c
|
||||
+++ b/src/mesa/drivers/dri/i965/brw_eu.c
|
||||
@@ -47,13 +47,13 @@ brw_swap_cmod(uint32_t cmod)
|
||||
case BRW_CONDITIONAL_NZ:
|
||||
return cmod;
|
||||
case BRW_CONDITIONAL_G:
|
||||
- return BRW_CONDITIONAL_LE;
|
||||
- case BRW_CONDITIONAL_GE:
|
||||
return BRW_CONDITIONAL_L;
|
||||
+ case BRW_CONDITIONAL_GE:
|
||||
+ return BRW_CONDITIONAL_LE;
|
||||
case BRW_CONDITIONAL_L:
|
||||
- return BRW_CONDITIONAL_GE;
|
||||
- case BRW_CONDITIONAL_LE:
|
||||
return BRW_CONDITIONAL_G;
|
||||
+ case BRW_CONDITIONAL_LE:
|
||||
+ return BRW_CONDITIONAL_GE;
|
||||
default:
|
||||
return ~0;
|
||||
}
|
||||
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
|
||||
index de4820b..32da289 100644
|
||||
--- a/src/mesa/main/bufferobj.c
|
||||
+++ b/src/mesa/main/bufferobj.c
|
||||
@@ -524,7 +524,7 @@ _mesa_copy_buffer_subdata(struct gl_context *ctx,
|
||||
GLintptr readOffset, GLintptr writeOffset,
|
||||
GLsizeiptr size)
|
||||
{
|
||||
- void *srcPtr, *dstPtr;
|
||||
+ GLubyte *srcPtr, *dstPtr;
|
||||
|
||||
/* the buffers should not be mapped */
|
||||
assert(!_mesa_bufferobj_mapped(src));
|
||||
@@ -1311,6 +1311,12 @@ _mesa_CopyBufferSubData(GLenum readTarget, GLenum writeTarget,
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (size < 0) {
|
||||
+ _mesa_error(ctx, GL_INVALID_VALUE,
|
||||
+ "glCopyBufferSubData(writeOffset = %d)", (int) size);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (readOffset + size > src->Size) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE,
|
||||
"glCopyBuffserSubData(readOffset + size = %d)",
|
||||
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
|
||||
index b5b10aa..64f592a 100644
|
||||
--- a/src/mesa/main/fbobject.c
|
||||
+++ b/src/mesa/main/fbobject.c
|
||||
@@ -1245,7 +1245,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
|
||||
case GL_RGBA8I_EXT:
|
||||
case GL_RGBA16I_EXT:
|
||||
case GL_RGBA32I_EXT:
|
||||
- return ctx->Extensions.EXT_texture_integer ? GL_RGBA : 0;
|
||||
+ return ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer ? GL_RGBA : 0;
|
||||
|
||||
case GL_RGB8UI_EXT:
|
||||
case GL_RGB16UI_EXT:
|
||||
@@ -1253,7 +1254,8 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
|
||||
case GL_RGB8I_EXT:
|
||||
case GL_RGB16I_EXT:
|
||||
case GL_RGB32I_EXT:
|
||||
- return ctx->Extensions.EXT_texture_integer ? GL_RGB : 0;
|
||||
+ return ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer ? GL_RGB : 0;
|
||||
|
||||
case GL_R8UI:
|
||||
case GL_R8I:
|
||||
@@ -1261,8 +1263,9 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
|
||||
case GL_R16I:
|
||||
case GL_R32UI:
|
||||
case GL_R32I:
|
||||
- return ctx->Extensions.ARB_texture_rg &&
|
||||
- ctx->Extensions.EXT_texture_integer ? GL_RED : 0;
|
||||
+ return ctx->VersionMajor >= 3 ||
|
||||
+ (ctx->Extensions.ARB_texture_rg &&
|
||||
+ ctx->Extensions.EXT_texture_integer) ? GL_RED : 0;
|
||||
|
||||
case GL_RG8UI:
|
||||
case GL_RG8I:
|
||||
@@ -1270,8 +1273,9 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat)
|
||||
case GL_RG16I:
|
||||
case GL_RG32UI:
|
||||
case GL_RG32I:
|
||||
- return ctx->Extensions.ARB_texture_rg &&
|
||||
- ctx->Extensions.EXT_texture_integer ? GL_RG : 0;
|
||||
+ return ctx->VersionMajor >= 3 ||
|
||||
+ (ctx->Extensions.ARB_texture_rg &&
|
||||
+ ctx->Extensions.EXT_texture_integer) ? GL_RG : 0;
|
||||
|
||||
case GL_INTENSITY8I_EXT:
|
||||
case GL_INTENSITY8UI_EXT:
|
||||
diff --git a/src/mesa/main/format_unpack.c b/src/mesa/main/format_unpack.c
|
||||
index a484979..fece8d9 100644
|
||||
--- a/src/mesa/main/format_unpack.c
|
||||
+++ b/src/mesa/main/format_unpack.c
|
||||
@@ -2922,7 +2922,7 @@ unpack_uint_z_Z32_FLOAT(const void *src, GLuint *dst, GLuint n)
|
||||
const float *s = (const float *)src;
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
- dst[i] = FLOAT_TO_UINT(IROUND(CLAMP((s[i]), 0.0F, 1.0F)));
|
||||
+ dst[i] = FLOAT_TO_UINT(CLAMP(s[i], 0.0F, 1.0F));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2938,7 +2938,7 @@ unpack_uint_z_Z32_FLOAT_X24S8(const void *src, GLuint *dst, GLuint n)
|
||||
GLuint i;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
- dst[i] = FLOAT_TO_UINT(IROUND(CLAMP((s[i].z), 0.0F, 1.0F)));
|
||||
+ dst[i] = FLOAT_TO_UINT(CLAMP(s[i].z, 0.0F, 1.0F));
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
|
||||
index 8b65cf0..b6c2645 100644
|
||||
--- a/src/mesa/main/image.c
|
||||
+++ b/src/mesa/main/image.c
|
||||
@@ -356,18 +356,92 @@ _mesa_bytes_per_pixel( GLenum format, GLenum type )
|
||||
|
||||
|
||||
/**
|
||||
- * Test for a legal pixel format and type.
|
||||
+ * Do error checking of format/type combinations for glReadPixels,
|
||||
+ * glDrawPixels and glTex[Sub]Image. Note that depending on the format
|
||||
+ * and type values, we may either generate GL_INVALID_OPERATION or
|
||||
+ * GL_INVALID_ENUM.
|
||||
*
|
||||
* \param format pixel format.
|
||||
* \param type pixel type.
|
||||
*
|
||||
- * \return GL_TRUE if the given pixel format and type are legal, or GL_FALSE
|
||||
- * otherwise.
|
||||
+ * \return GL_INVALID_ENUM, GL_INVALID_OPERATION or GL_NO_ERROR
|
||||
*/
|
||||
-GLboolean
|
||||
-_mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
- GLenum format, GLenum type)
|
||||
+GLenum
|
||||
+_mesa_error_check_format_and_type(const struct gl_context *ctx,
|
||||
+ GLenum format, GLenum type)
|
||||
{
|
||||
+ /* special type-based checks (see glReadPixels, glDrawPixels error lists) */
|
||||
+ switch (type) {
|
||||
+ case GL_BITMAP:
|
||||
+ if (format != GL_COLOR_INDEX && format != GL_STENCIL_INDEX) {
|
||||
+ return GL_INVALID_ENUM;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case GL_UNSIGNED_BYTE_3_3_2:
|
||||
+ case GL_UNSIGNED_BYTE_2_3_3_REV:
|
||||
+ case GL_UNSIGNED_SHORT_5_6_5:
|
||||
+ case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
+ if (format == GL_RGB) {
|
||||
+ break; /* OK */
|
||||
+ }
|
||||
+ if (format == GL_RGB_INTEGER_EXT &&
|
||||
+ ctx->Extensions.ARB_texture_rgb10_a2ui) {
|
||||
+ break; /* OK */
|
||||
+ }
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+
|
||||
+ case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
+ case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
+ case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
+ case GL_UNSIGNED_SHORT_1_5_5_5_REV:
|
||||
+ case GL_UNSIGNED_INT_8_8_8_8:
|
||||
+ case GL_UNSIGNED_INT_8_8_8_8_REV:
|
||||
+ case GL_UNSIGNED_INT_10_10_10_2:
|
||||
+ case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
+ if (format == GL_RGBA ||
|
||||
+ format == GL_BGRA ||
|
||||
+ format == GL_ABGR_EXT) {
|
||||
+ break; /* OK */
|
||||
+ }
|
||||
+ if ((format == GL_RGBA_INTEGER_EXT || format == GL_BGRA_INTEGER_EXT) &&
|
||||
+ ctx->Extensions.ARB_texture_rgb10_a2ui) {
|
||||
+ break; /* OK */
|
||||
+ }
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+
|
||||
+ case GL_UNSIGNED_INT_24_8:
|
||||
+ if (!ctx->Extensions.EXT_packed_depth_stencil) {
|
||||
+ return GL_INVALID_ENUM;
|
||||
+ }
|
||||
+ if (format != GL_DEPTH_STENCIL) {
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+ }
|
||||
+ return GL_NO_ERROR;
|
||||
+
|
||||
+ case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
|
||||
+ if (!ctx->Extensions.ARB_depth_buffer_float) {
|
||||
+ return GL_INVALID_ENUM;
|
||||
+ }
|
||||
+ if (format != GL_DEPTH_STENCIL) {
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+ }
|
||||
+ return GL_NO_ERROR;
|
||||
+
|
||||
+ case GL_UNSIGNED_INT_10F_11F_11F_REV:
|
||||
+ if (!ctx->Extensions.EXT_packed_float) {
|
||||
+ return GL_INVALID_ENUM;
|
||||
+ }
|
||||
+ if (format != GL_RGB) {
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+ }
|
||||
+ return GL_NO_ERROR;
|
||||
+
|
||||
+ default:
|
||||
+ ; /* fall-through */
|
||||
+ }
|
||||
+
|
||||
+ /* now, for each format, check the type for compatibility */
|
||||
switch (format) {
|
||||
case GL_COLOR_INDEX:
|
||||
case GL_STENCIL_INDEX:
|
||||
@@ -380,12 +454,14 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_RED:
|
||||
case GL_GREEN:
|
||||
case GL_BLUE:
|
||||
@@ -404,16 +480,17 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_RG:
|
||||
if (!ctx->Extensions.ARB_texture_rg)
|
||||
- return GL_FALSE;
|
||||
-
|
||||
+ return GL_INVALID_ENUM;
|
||||
switch (type) {
|
||||
case GL_BYTE:
|
||||
case GL_UNSIGNED_BYTE:
|
||||
@@ -422,12 +499,14 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_RGB:
|
||||
switch (type) {
|
||||
case GL_BYTE:
|
||||
@@ -441,16 +520,20 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
case GL_UNSIGNED_INT_5_9_9_9_REV:
|
||||
- return ctx->Extensions.EXT_texture_shared_exponent;
|
||||
+ return ctx->Extensions.EXT_texture_shared_exponent
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
case GL_UNSIGNED_INT_10F_11F_11F_REV:
|
||||
- return ctx->Extensions.EXT_packed_float;
|
||||
+ return ctx->Extensions.EXT_packed_float
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_BGR:
|
||||
switch (type) {
|
||||
/* NOTE: no packed types are supported with BGR. That's
|
||||
@@ -463,12 +546,14 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_RGBA:
|
||||
case GL_BGRA:
|
||||
case GL_ABGR_EXT:
|
||||
@@ -488,28 +573,37 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_INT_8_8_8_8_REV:
|
||||
case GL_UNSIGNED_INT_10_10_10_2:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
- return GL_TRUE;
|
||||
- case GL_HALF_FLOAT_ARB:
|
||||
- return ctx->Extensions.ARB_half_float_pixel;
|
||||
+ return GL_NO_ERROR;
|
||||
+ case GL_HALF_FLOAT:
|
||||
+ return ctx->Extensions.ARB_half_float_pixel
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
+
|
||||
case GL_YCBCR_MESA:
|
||||
+ if (!ctx->Extensions.MESA_ycbcr_texture)
|
||||
+ return GL_INVALID_ENUM;
|
||||
if (type == GL_UNSIGNED_SHORT_8_8_MESA ||
|
||||
type == GL_UNSIGNED_SHORT_8_8_REV_MESA)
|
||||
- return GL_TRUE;
|
||||
+ return GL_NO_ERROR;
|
||||
else
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_OPERATION;
|
||||
+
|
||||
case GL_DEPTH_STENCIL_EXT:
|
||||
- if ((ctx->Extensions.EXT_packed_depth_stencil &&
|
||||
- type == GL_UNSIGNED_INT_24_8_EXT) ||
|
||||
- (ctx->Extensions.ARB_depth_buffer_float &&
|
||||
- type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV))
|
||||
- return GL_TRUE;
|
||||
+ if (ctx->Extensions.EXT_packed_depth_stencil &&
|
||||
+ type == GL_UNSIGNED_INT_24_8)
|
||||
+ return GL_NO_ERROR;
|
||||
+ else if (ctx->Extensions.ARB_depth_buffer_float &&
|
||||
+ type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV)
|
||||
+ return GL_NO_ERROR;
|
||||
else
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
+
|
||||
case GL_DUDV_ATI:
|
||||
case GL_DU8DV8_ATI:
|
||||
+ if (!ctx->Extensions.ATI_envmap_bumpmap)
|
||||
+ return GL_INVALID_ENUM;
|
||||
switch (type) {
|
||||
case GL_BYTE:
|
||||
case GL_UNSIGNED_BYTE:
|
||||
@@ -518,9 +612,9 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
case GL_FLOAT:
|
||||
- return GL_TRUE;
|
||||
+ return GL_NO_ERROR;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
/* integer-valued formats */
|
||||
@@ -536,9 +630,11 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_SHORT:
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
- return ctx->Extensions.EXT_texture_integer;
|
||||
+ return (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer)
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
case GL_RGB_INTEGER_EXT:
|
||||
@@ -549,14 +645,17 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_SHORT:
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
- return ctx->Extensions.EXT_texture_integer;
|
||||
+ return (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer)
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
case GL_UNSIGNED_BYTE_3_3_2:
|
||||
case GL_UNSIGNED_BYTE_2_3_3_REV:
|
||||
case GL_UNSIGNED_SHORT_5_6_5:
|
||||
case GL_UNSIGNED_SHORT_5_6_5_REV:
|
||||
- return ctx->Extensions.ARB_texture_rgb10_a2ui;
|
||||
+ return ctx->Extensions.ARB_texture_rgb10_a2ui
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
case GL_BGR_INTEGER_EXT:
|
||||
@@ -568,9 +667,11 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
/* NOTE: no packed formats w/ BGR format */
|
||||
- return ctx->Extensions.EXT_texture_integer;
|
||||
+ return (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer)
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
case GL_RGBA_INTEGER_EXT:
|
||||
@@ -582,7 +683,9 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_SHORT:
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
- return ctx->Extensions.EXT_texture_integer;
|
||||
+ return (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer)
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4:
|
||||
case GL_UNSIGNED_SHORT_4_4_4_4_REV:
|
||||
case GL_UNSIGNED_SHORT_5_5_5_1:
|
||||
@@ -591,9 +694,10 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_INT_8_8_8_8_REV:
|
||||
case GL_UNSIGNED_INT_10_10_10_2:
|
||||
case GL_UNSIGNED_INT_2_10_10_10_REV:
|
||||
- return ctx->Extensions.ARB_texture_rgb10_a2ui;
|
||||
+ return ctx->Extensions.ARB_texture_rgb10_a2ui
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
case GL_LUMINANCE_INTEGER_EXT:
|
||||
@@ -605,15 +709,16 @@ _mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
case GL_UNSIGNED_SHORT:
|
||||
case GL_INT:
|
||||
case GL_UNSIGNED_INT:
|
||||
- return ctx->Extensions.EXT_texture_integer;
|
||||
+ return ctx->Extensions.EXT_texture_integer
|
||||
+ ? GL_NO_ERROR : GL_INVALID_ENUM;
|
||||
default:
|
||||
- return GL_FALSE;
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
|
||||
default:
|
||||
- ; /* fall-through */
|
||||
+ return GL_INVALID_ENUM;
|
||||
}
|
||||
- return GL_FALSE;
|
||||
+ return GL_NO_ERROR;
|
||||
}
|
||||
|
||||
|
||||
diff --git a/src/mesa/main/image.h b/src/mesa/main/image.h
|
||||
index e4961ed..f1ed883 100644
|
||||
--- a/src/mesa/main/image.h
|
||||
+++ b/src/mesa/main/image.h
|
||||
@@ -53,9 +53,9 @@ _mesa_components_in_format( GLenum format );
|
||||
extern GLint
|
||||
_mesa_bytes_per_pixel( GLenum format, GLenum type );
|
||||
|
||||
-extern GLboolean
|
||||
-_mesa_is_legal_format_and_type(const struct gl_context *ctx,
|
||||
- GLenum format, GLenum type);
|
||||
+extern GLenum
|
||||
+_mesa_error_check_format_and_type(const struct gl_context *ctx,
|
||||
+ GLenum format, GLenum type);
|
||||
|
||||
extern GLboolean
|
||||
_mesa_is_color_format(GLenum format);
|
||||
diff --git a/src/mesa/main/readpix.c b/src/mesa/main/readpix.c
|
||||
index 6c041fa..d0947d6 100644
|
||||
--- a/src/mesa/main/readpix.c
|
||||
+++ b/src/mesa/main/readpix.c
|
||||
@@ -650,6 +650,7 @@ _mesa_error_check_format_type(struct gl_context *ctx, GLenum format,
|
||||
{
|
||||
const char *readDraw = drawing ? "Draw" : "Read";
|
||||
const GLboolean reading = !drawing;
|
||||
+ GLenum err;
|
||||
|
||||
/* state validation should have already been done */
|
||||
ASSERT(ctx->NewState == 0x0);
|
||||
@@ -671,9 +672,9 @@ _mesa_error_check_format_type(struct gl_context *ctx, GLenum format,
|
||||
}
|
||||
|
||||
/* basic combinations test */
|
||||
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||
- _mesa_error(ctx, GL_INVALID_ENUM,
|
||||
- "gl%sPixels(format or type)", readDraw);
|
||||
+ err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
+ if (err != GL_NO_ERROR) {
|
||||
+ _mesa_error(ctx, err, "gl%sPixels(format or type)", readDraw);
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
@@ -777,7 +778,7 @@ _mesa_error_check_format_type(struct gl_context *ctx, GLenum format,
|
||||
}
|
||||
break;
|
||||
default:
|
||||
- /* this should have been caught in _mesa_is_legal_format_type() */
|
||||
+ /* this should have been caught in _mesa_error_check_format_type() */
|
||||
_mesa_problem(ctx, "unexpected format in _mesa_%sPixels", readDraw);
|
||||
return GL_TRUE;
|
||||
}
|
||||
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
|
||||
index 259eb90..5fdc2ab 100644
|
||||
--- a/src/mesa/main/texformat.c
|
||||
+++ b/src/mesa/main/texformat.c
|
||||
@@ -706,6 +706,12 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_INTENSITY_INT32);
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_INT32);
|
||||
break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer) {
|
||||
+ switch (internalFormat) {
|
||||
case GL_RGB8UI_EXT:
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_UINT8);
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_UINT8);
|
||||
@@ -822,7 +828,9 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
|
||||
}
|
||||
}
|
||||
|
||||
- if (ctx->Extensions.ARB_texture_rg && ctx->Extensions.EXT_texture_integer) {
|
||||
+ if (ctx->VersionMajor >= 3 ||
|
||||
+ (ctx->Extensions.ARB_texture_rg &&
|
||||
+ ctx->Extensions.EXT_texture_integer)) {
|
||||
switch (internalFormat) {
|
||||
case GL_R8UI:
|
||||
RETURN_IF_SUPPORTED(MESA_FORMAT_R_UINT8);
|
||||
diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c
|
||||
index 76ac5a2..254199b 100644
|
||||
--- a/src/mesa/main/texgetimage.c
|
||||
+++ b/src/mesa/main/texgetimage.c
|
||||
@@ -691,7 +691,7 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
|
||||
struct gl_texture_image *texImage;
|
||||
const GLint maxLevels = _mesa_max_texture_levels(ctx, target);
|
||||
const GLuint dimensions = (target == GL_TEXTURE_3D) ? 3 : 2;
|
||||
- GLenum baseFormat;
|
||||
+ GLenum baseFormat, err;
|
||||
|
||||
if (maxLevels == 0) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(target=0x%x)", target);
|
||||
@@ -734,6 +734,12 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
|
||||
if (!ctx->Extensions.ATI_envmap_bumpmap
|
||||
&& _mesa_is_dudv_format(format)) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGetTexImage(format)");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
+ if (err != GL_NO_ERROR) {
|
||||
+ _mesa_error(ctx, err, "glGetTexImage(format/type)");
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
@@ -744,14 +750,6 @@ getteximage_error_check(struct gl_context *ctx, GLenum target, GLint level,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||
- /* GL_INVALID_OPERATION is generated by a format/type
|
||||
- * mismatch (see the 1.2 spec page 94, sec 3.6.4.)
|
||||
- */
|
||||
- _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexImage(target)");
|
||||
- return GL_TRUE;
|
||||
- }
|
||||
-
|
||||
texImage = _mesa_select_tex_image(ctx, texObj, target, level);
|
||||
if (!texImage) {
|
||||
/* non-existant texture image */
|
||||
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
|
||||
index c347f59..077c196 100644
|
||||
--- a/src/mesa/main/teximage.c
|
||||
+++ b/src/mesa/main/teximage.c
|
||||
@@ -323,7 +323,8 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
|
||||
}
|
||||
#endif /* FEATURE_EXT_texture_sRGB */
|
||||
|
||||
- if (ctx->Extensions.EXT_texture_integer) {
|
||||
+ if (ctx->VersionMajor >= 3 ||
|
||||
+ ctx->Extensions.EXT_texture_integer) {
|
||||
switch (internalFormat) {
|
||||
case GL_RGBA8UI_EXT:
|
||||
case GL_RGBA16UI_EXT:
|
||||
@@ -340,6 +341,11 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
|
||||
case GL_RGB16I_EXT:
|
||||
case GL_RGB32I_EXT:
|
||||
return GL_RGB;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (ctx->Extensions.EXT_texture_integer) {
|
||||
+ switch (internalFormat) {
|
||||
case GL_ALPHA8UI_EXT:
|
||||
case GL_ALPHA16UI_EXT:
|
||||
case GL_ALPHA32UI_EXT:
|
||||
@@ -391,7 +397,7 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
|
||||
case GL_R16UI:
|
||||
case GL_R32I:
|
||||
case GL_R32UI:
|
||||
- if (!ctx->Extensions.EXT_texture_integer)
|
||||
+ if (ctx->VersionMajor < 3 && !ctx->Extensions.EXT_texture_integer)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
case GL_R8:
|
||||
@@ -416,7 +422,7 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat )
|
||||
case GL_RG16UI:
|
||||
case GL_RG32I:
|
||||
case GL_RG32UI:
|
||||
- if (!ctx->Extensions.EXT_texture_integer)
|
||||
+ if (ctx->VersionMajor < 3 && !ctx->Extensions.EXT_texture_integer)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
case GL_RG:
|
||||
@@ -1578,6 +1584,7 @@ texture_error_check( struct gl_context *ctx,
|
||||
const GLboolean isProxy = target == proxyTarget;
|
||||
GLboolean sizeOK = GL_TRUE;
|
||||
GLboolean colorFormat;
|
||||
+ GLenum err;
|
||||
|
||||
/* Even though there are no color-index textures, we still have to support
|
||||
* uploading color-index data and remapping it to RGB via the
|
||||
@@ -1646,16 +1653,10 @@ texture_error_check( struct gl_context *ctx,
|
||||
}
|
||||
|
||||
/* Check incoming image format and type */
|
||||
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||
- /* Normally, GL_INVALID_OPERATION is generated by a format/type
|
||||
- * mismatch (see the 1.2 spec page 94, sec 3.6.4.). But with the
|
||||
- * GL_EXT_texture_integer extension, some combinations should generate
|
||||
- * GL_INVALID_ENUM instead (grr!).
|
||||
- */
|
||||
+ err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
+ if (err != GL_NO_ERROR) {
|
||||
if (!isProxy) {
|
||||
- GLenum error = _mesa_is_integer_format(format)
|
||||
- ? GL_INVALID_ENUM : GL_INVALID_OPERATION;
|
||||
- _mesa_error(ctx, error,
|
||||
+ _mesa_error(ctx, err,
|
||||
"glTexImage%dD(incompatible format 0x%x, type 0x%x)",
|
||||
dimensions, format, type);
|
||||
}
|
||||
@@ -1754,7 +1755,7 @@ texture_error_check( struct gl_context *ctx,
|
||||
}
|
||||
|
||||
/* additional checks for integer textures */
|
||||
- if (ctx->Extensions.EXT_texture_integer &&
|
||||
+ if ((ctx->VersionMajor >= 3 || ctx->Extensions.EXT_texture_integer) &&
|
||||
(_mesa_is_integer_format(format) !=
|
||||
_mesa_is_integer_format(internalFormat))) {
|
||||
if (!isProxy) {
|
||||
@@ -1805,6 +1806,8 @@ subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
||||
GLint width, GLint height, GLint depth,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
+ GLenum err;
|
||||
+
|
||||
/* Basic level check */
|
||||
if (level < 0 || level >= MAX_TEXTURE_LEVELS) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glTexSubImage2D(level=%d)", level);
|
||||
@@ -1828,13 +1831,9 @@ subtexture_error_check( struct gl_context *ctx, GLuint dimensions,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
- if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
|
||||
- /* As with the glTexImage2D check above, the error code here
|
||||
- * depends on texture integer.
|
||||
- */
|
||||
- GLenum error = _mesa_is_integer_format(format)
|
||||
- ? GL_INVALID_OPERATION : GL_INVALID_ENUM;
|
||||
- _mesa_error(ctx, error,
|
||||
+ err = _mesa_error_check_format_and_type(ctx, format, type);
|
||||
+ if (err != GL_NO_ERROR) {
|
||||
+ _mesa_error(ctx, err,
|
||||
"glTexSubImage%dD(incompatible format 0x%x, type 0x%x)",
|
||||
dimensions, format, type);
|
||||
return GL_TRUE;
|
||||
diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
|
||||
index 38ae1ce..fc6e17c 100644
|
||||
--- a/src/mesa/main/version.c
|
||||
+++ b/src/mesa/main/version.c
|
||||
@@ -140,7 +140,6 @@ compute_version(struct gl_context *ctx)
|
||||
ctx->Extensions.EXT_framebuffer_sRGB &&
|
||||
ctx->Extensions.EXT_packed_float &&
|
||||
ctx->Extensions.EXT_texture_array &&
|
||||
- ctx->Extensions.EXT_texture_integer &&
|
||||
ctx->Extensions.EXT_texture_shared_exponent &&
|
||||
ctx->Extensions.EXT_transform_feedback &&
|
||||
ctx->Extensions.NV_conditional_render);
|
||||
diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c
|
||||
index 04d451b..d4992a7 100644
|
||||
--- a/src/mesa/state_tracker/st_cb_drawpixels.c
|
||||
+++ b/src/mesa/state_tracker/st_cb_drawpixels.c
|
||||
@@ -215,7 +215,7 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
- p->NumInstructions = write_depth ? 2 : 1;
|
||||
+ p->NumInstructions = write_depth ? 3 : 1;
|
||||
p->NumInstructions += write_stencil ? 1 : 0;
|
||||
|
||||
p->Instructions = _mesa_alloc_instructions(p->NumInstructions);
|
||||
@@ -236,6 +236,13 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
|
||||
p->Instructions[ic].TexSrcUnit = 0;
|
||||
p->Instructions[ic].TexSrcTarget = TEXTURE_2D_INDEX;
|
||||
ic++;
|
||||
+ /* MOV result.color, fragment.color; */
|
||||
+ p->Instructions[ic].Opcode = OPCODE_MOV;
|
||||
+ p->Instructions[ic].DstReg.File = PROGRAM_OUTPUT;
|
||||
+ p->Instructions[ic].DstReg.Index = FRAG_RESULT_COLOR;
|
||||
+ p->Instructions[ic].SrcReg[0].File = PROGRAM_INPUT;
|
||||
+ p->Instructions[ic].SrcReg[0].Index = FRAG_ATTRIB_COL0;
|
||||
+ ic++;
|
||||
}
|
||||
|
||||
if (write_stencil) {
|
||||
@@ -258,8 +265,10 @@ st_make_drawpix_z_stencil_program(struct st_context *st,
|
||||
|
||||
p->InputsRead = FRAG_BIT_TEX0 | FRAG_BIT_COL0;
|
||||
p->OutputsWritten = 0;
|
||||
- if (write_depth)
|
||||
+ if (write_depth) {
|
||||
p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_DEPTH);
|
||||
+ p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_COLOR);
|
||||
+ }
|
||||
if (write_stencil)
|
||||
p->OutputsWritten |= BITFIELD64_BIT(FRAG_RESULT_STENCIL);
|
||||
|
||||
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
|
||||
index ad4f23c..88c5ad7 100644
|
||||
--- a/src/mesa/state_tracker/st_cb_texture.c
|
||||
+++ b/src/mesa/state_tracker/st_cb_texture.c
|
||||
@@ -406,6 +406,8 @@ guess_and_alloc_texture(struct st_context *st,
|
||||
ptLayers,
|
||||
bindings);
|
||||
|
||||
+ stObj->lastLevel = lastLevel;
|
||||
+
|
||||
DBG("%s returning %d\n", __FUNCTION__, (stObj->pt != NULL));
|
||||
|
||||
return stObj->pt != NULL;
|
||||
diff --git a/tests/glx/Makefile.am b/tests/glx/Makefile.am
|
||||
index cdebf5d..5f55a5b 100644
|
||||
--- a/tests/glx/Makefile.am
|
||||
+++ b/tests/glx/Makefile.am
|
||||
@@ -1,6 +1,6 @@
|
||||
-AM_CFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi \
|
||||
+AM_CFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi -I$(top_builddir)/include \
|
||||
$(X11_CFLAGS) $(GTEST_CFLAGS)
|
||||
-AM_CXXFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi \
|
||||
+AM_CXXFLAGS = -I$(top_builddir)/src/glx -I$(top_builddir)/src/mapi -I$(top_builddir)/include \
|
||||
$(X11_CFLAGS) $(GTEST_CFLAGS)
|
||||
|
||||
if HAVE_GTEST
|
File diff suppressed because it is too large
Load Diff
|
@ -35,8 +35,8 @@
|
|||
|
||||
Summary: Mesa graphics libraries
|
||||
Name: mesa
|
||||
Version: 8.0.3
|
||||
Release: 3%{?dist}
|
||||
Version: 8.0.4
|
||||
Release: 1%{?dist}
|
||||
License: MIT
|
||||
Group: System Environment/Libraries
|
||||
URL: http://www.mesa3d.org
|
||||
|
@ -54,7 +54,7 @@ Patch9: mesa-8.0-llvmpipe-shmget.patch
|
|||
Patch12: mesa-8.0.1-fix-16bpp.patch
|
||||
Patch13: mesa-8.0-nouveau-vieux-nvfx-lowmem.patch
|
||||
Patch14: mesa-8.0-nouveau-vieux-finish.patch
|
||||
Patch15: mesa-8.0.3-git.patch
|
||||
Patch15: mesa-8.0.4-git.patch
|
||||
|
||||
BuildRequires: pkgconfig autoconf automake libtool
|
||||
%if %{with_hardware}
|
||||
|
@ -570,6 +570,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Sep 19 2012 Dave Airlie <airlied@redhat.com> 8.0.4-1
|
||||
- rebase to 8.0.4 release + 8.0 branch fixes
|
||||
|
||||
* Mon Jun 25 2012 Adam Jackson <ajax@redhat.com> 8.0.3-3
|
||||
- mesa-8.0.3-git.patch: Sync with 8.0 branch.
|
||||
|
||||
|
|
Loading…
Reference in New Issue