Mesa (7.10): st/dri: Fix surfaceless gl using contexts with previous bound surfaces
Module: Mesa Branch: 7.10 Commit: 71b06c63ce4a5f58ceb72725d8320bc735997241 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=71b06c63ce4a5f58ceb72725d8320bc735997241 Author: Benjamin Franzke Date: Wed Feb 9 20:42:50 2011 +0100 st/dri: Fix surfaceless gl using contexts with previous bound surfaces ctx->dPriv might be != NULL then draw which is NULL is accessed: struct dri_drawable *draw = dri_drawable(driDrawPriv); [..] if (ctx->dPriv != driDrawPriv) { ctx->dPriv = driDrawPriv; draw->texture_stamp = driDrawPriv->lastStamp - 1; } Cherry-picked from 0acb31be171f01aec8b38ceaddf47b7da6dae2a0 Signed-off-by: Jakob Bornecrantz --- .../state_trackers/dri/common/dri_context.c|8 ++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/dri/common/dri_context.c b/src/gallium/state_trackers/dri/common/dri_context.c index aef1892..fc68ee1 100644 --- a/src/gallium/state_trackers/dri/common/dri_context.c +++ b/src/gallium/state_trackers/dri/common/dri_context.c @@ -175,6 +175,11 @@ dri_make_current(__DRIcontext * cPriv, ++ctx->bind_count; + if (!driDrawPriv && !driReadPriv) + return ctx->stapi->make_current(ctx->stapi, ctx->st, NULL, NULL); + else if (!driDrawPriv || !driReadPriv) + return GL_FALSE; + draw->context = ctx; if (ctx->dPriv != driDrawPriv) { ctx->dPriv = driDrawPriv; @@ -186,8 +191,7 @@ dri_make_current(__DRIcontext * cPriv, read->texture_stamp = driReadPriv->lastStamp - 1; } - ctx->stapi->make_current(ctx->stapi, ctx->st, - (draw) ? &draw->base : NULL, (read) ? &read->base : NULL); + ctx->stapi->make_current(ctx->stapi, ctx->st, &draw->base, &read->base); return GL_TRUE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (7.9): u_blitter: remove invalid assertion
Module: Mesa Branch: 7.9 Commit: e3dcb53e6e7f27cd34ef109cc1120b60461d6e42 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3dcb53e6e7f27cd34ef109cc1120b60461d6e42 Author: Marek Olšák Date: Wed Mar 30 02:19:32 2011 +0200 u_blitter: remove invalid assertion --- src/gallium/auxiliary/util/u_blitter.c |2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 7a16187..485d3c9 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -741,8 +741,6 @@ void util_blitter_copy_region(struct blitter_context *blitter, if (dst == src) { assert(!is_overlap(srcx, srcx + width, srcy, srcy + height, dstx, dstx + width, dsty, dsty + height)); - } else { - assert(dst->format == src->format); } assert(src->target < PIPE_MAX_TEXTURE_TYPES); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems.
Module: Mesa Branch: master Commit: ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee8d182426d4ecda7b9f5089d19d36f7de2a4dfe Author: Kenneth Graunke Date: Tue Mar 29 17:03:22 2011 -0700 intel: Add IS_GT2 macro for recognizing Sandybridge GT2 systems. Also, refactor IS_GEN6 to use the IS_GT1 and IS_GT2 macros. --- src/mesa/drivers/dri/intel/intel_chipset.h | 15 +++ 1 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_chipset.h b/src/mesa/drivers/dri/intel/intel_chipset.h index 4ff9140..a3f40ef 100644 --- a/src/mesa/drivers/dri/intel/intel_chipset.h +++ b/src/mesa/drivers/dri/intel/intel_chipset.h @@ -125,18 +125,17 @@ /* Compat macro for intel_decode.c */ #define IS_IRONLAKE(devid) IS_GEN5(devid) -#define IS_GEN6(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \ -devid == PCI_CHIP_SANDYBRIDGE_GT2 || \ -devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \ -devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS || \ -devid == PCI_CHIP_SANDYBRIDGE_S) - #define IS_GT1(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT1 || \ devid == PCI_CHIP_SANDYBRIDGE_M_GT1 || \ devid == PCI_CHIP_SANDYBRIDGE_S) +#define IS_GT2(devid) (devid == PCI_CHIP_SANDYBRIDGE_GT2 || \ +devid == PCI_CHIP_SANDYBRIDGE_GT2_PLUS || \ +devid == PCI_CHIP_SANDYBRIDGE_M_GT2 || \ +devid == PCI_CHIP_SANDYBRIDGE_M_GT2_PLUS) + +#define IS_GEN6(devid) (IS_GT1(devid) || IS_GT2(devid)) + #define IS_965(devid) (IS_GEN4(devid) || \ IS_G4X(devid) || \ IS_GEN5(devid) || \ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (7.10): st/mesa: Validate state before doing blits.
Module: Mesa Branch: 7.10 Commit: 7fcaf9ae80f82e37b82cfca367428730ebf097d5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7fcaf9ae80f82e37b82cfca367428730ebf097d5 Author: Henri Verbeet Date: Wed Mar 23 21:58:06 2011 +0100 st/mesa: Validate state before doing blits. Specifically, this ensures things like the front buffer actually exist. This fixes piglt fbo/fbo-sys-blit and fd.o bug 35483. Signed-off-by: Henri Verbeet (cherry picked from commit 5d7c27f5ec2f30c264dc2d53c4980970b3a13ee5) --- src/mesa/state_tracker/st_cb_blit.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 06cee52..d9eb806 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -38,6 +38,7 @@ #include "st_texture.h" #include "st_cb_blit.h" #include "st_cb_fbo.h" +#include "st_atom.h" #include "util/u_blit.h" #include "util/u_inlines.h" @@ -75,6 +76,8 @@ st_BlitFramebuffer(struct gl_context *ctx, struct gl_framebuffer *readFB = ctx->ReadBuffer; struct gl_framebuffer *drawFB = ctx->DrawBuffer; + st_validate_state(st); + if (!_mesa_clip_blit(ctx, &srcX0, &srcY0, &srcX1, &srcY1, &dstX0, &dstY0, &dstX1, &dstY1)) { return; /* nothing to draw/blit */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (7.9): st/mesa: Validate state before doing blits.
Module: Mesa Branch: 7.9 Commit: 6b46754bc050766afe5c3d8d02b5510d61efd360 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6b46754bc050766afe5c3d8d02b5510d61efd360 Author: Henri Verbeet Date: Wed Mar 23 21:58:06 2011 +0100 st/mesa: Validate state before doing blits. Specifically, this ensures things like the front buffer actually exist. This fixes piglt fbo/fbo-sys-blit and fd.o bug 35483. Signed-off-by: Henri Verbeet (cherry picked from commit 5d7c27f5ec2f30c264dc2d53c4980970b3a13ee5) --- src/mesa/state_tracker/st_cb_blit.c |3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 5367484..b464099 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -38,6 +38,7 @@ #include "st_texture.h" #include "st_cb_blit.h" #include "st_cb_fbo.h" +#include "st_atom.h" #include "util/u_blit.h" #include "util/u_inlines.h" @@ -75,6 +76,8 @@ st_BlitFramebuffer(GLcontext *ctx, struct gl_framebuffer *readFB = ctx->ReadBuffer; struct gl_framebuffer *drawFB = ctx->DrawBuffer; + st_validate_state(st); + if (!_mesa_clip_blit(ctx, &srcX0, &srcY0, &srcX1, &srcY1, &dstX0, &dstY0, &dstX1, &dstY1)) { return; /* nothing to draw/blit */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): nv50,nvc0: implement colour clamping controls
Module: Mesa Branch: master Commit: 8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f060df60d1f5ad63a341e39f2ec5a0c3c452cf5 Author: Christoph Bumiller Date: Tue Mar 29 23:09:02 2011 +0200 nv50,nvc0: implement colour clamping controls --- src/gallium/drivers/nv50/nv50_3d.xml.h |2 +- src/gallium/drivers/nv50/nv50_context.h|4 ++- src/gallium/drivers/nv50/nv50_program.c|2 +- src/gallium/drivers/nv50/nv50_screen.c |2 + src/gallium/drivers/nv50/nv50_shader_state.c | 41 +++- src/gallium/drivers/nv50/nv50_state.c |3 ++ src/gallium/drivers/nv50/nv50_state_validate.c |2 +- src/gallium/drivers/nv50/nv50_stateobj.h |2 +- src/gallium/drivers/nvc0/nvc0_screen.c |4 +- src/gallium/drivers/nvc0/nvc0_shader_state.c |2 - src/gallium/drivers/nvc0/nvc0_state.c |4 ++ src/gallium/drivers/nvc0/nvc0_stateobj.h |2 +- 12 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/gallium/drivers/nv50/nv50_3d.xml.h b/src/gallium/drivers/nv50/nv50_3d.xml.h index 9bb3211..92b97dd 100644 --- a/src/gallium/drivers/nv50/nv50_3d.xml.h +++ b/src/gallium/drivers/nv50/nv50_3d.xml.h @@ -1673,7 +1673,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define NV50_3D_MAP_SEMANTIC_0_BFC0_ID__SHIFT 8 #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__MASK 0x00ff #define NV50_3D_MAP_SEMANTIC_0_COLR_NR__SHIFT 16 -#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0xff00 +#define NV50_3D_MAP_SEMANTIC_0_CLMP_EN 0x0100 #define NV50_3D_MAP_SEMANTIC_1 0x1908 #define NV50_3D_MAP_SEMANTIC_1_CLIP_START__MASK 0x00ff diff --git a/src/gallium/drivers/nv50/nv50_context.h b/src/gallium/drivers/nv50/nv50_context.h index 46e6c22..f480f04 100644 --- a/src/gallium/drivers/nv50/nv50_context.h +++ b/src/gallium/drivers/nv50/nv50_context.h @@ -80,6 +80,8 @@ struct nv50_context { uint32_t instance_elts; /* bitmask of per-instance elements */ uint32_t instance_base; uint32_t interpolant_ctrl; + uint32_t semantic_color; + uint32_t semantic_psize; int32_t index_bias; boolean prim_restart; boolean point_sprite; @@ -183,7 +185,7 @@ void nv50_fragprog_validate(struct nv50_context *); void nv50_fp_linkage_validate(struct nv50_context *); void nv50_gp_linkage_validate(struct nv50_context *); void nv50_constbufs_validate(struct nv50_context *); -void nv50_sprite_coords_validate(struct nv50_context *); +void nv50_validate_derived_rs(struct nv50_context *); /* nv50_state.c */ extern void nv50_init_state_functions(struct nv50_context *); diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c index a63f9d8..37025a6 100644 --- a/src/gallium/drivers/nv50/nv50_program.c +++ b/src/gallium/drivers/nv50/nv50_program.c @@ -486,7 +486,7 @@ nv50_fragprog_prepare(struct nv50_translation_info *ti) ++nintp; } - p->fp.colors = (1 << 24) | 4; /* CLAMP, FFC0_ID = 4 */ + p->fp.colors = 4 << NV50_3D_MAP_SEMANTIC_0_FFC0_ID__SHIFT; /* after HPOS */ for (i = 0; i < p->in_nr; ++i) { int j = p->in[i].id; diff --git a/src/gallium/drivers/nv50/nv50_screen.c b/src/gallium/drivers/nv50/nv50_screen.c index 7690c80..9978d1e 100644 --- a/src/gallium/drivers/nv50/nv50_screen.c +++ b/src/gallium/drivers/nv50/nv50_screen.c @@ -108,6 +108,8 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param) return 1; case PIPE_CAP_MAX_RENDER_TARGETS: return 8; + case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL: + return 1; case PIPE_CAP_TIMER_QUERY: case PIPE_CAP_OCCLUSION_QUERY: return 1; diff --git a/src/gallium/drivers/nv50/nv50_shader_state.c b/src/gallium/drivers/nv50/nv50_shader_state.c index bea9c09..82c346c 100644 --- a/src/gallium/drivers/nv50/nv50_shader_state.c +++ b/src/gallium/drivers/nv50/nv50_shader_state.c @@ -226,7 +226,7 @@ nv50_gmtyprog_validate(struct nv50_context *nv50) OUT_RING (chan, gp->code_base); } -void +static void nv50_sprite_coords_validate(struct nv50_context *nv50) { struct nouveau_channel *chan = nv50->screen->base.channel; @@ -282,6 +282,39 @@ nv50_sprite_coords_validate(struct nv50_context *nv50) OUT_RINGp (chan, pntc, 8); } +/* Validate state derived from shaders and the rasterizer cso. */ +void +nv50_validate_derived_rs(struct nv50_context *nv50) +{ + struct nouveau_channel *chan = nv50->screen->base.channel; + uint32_t color, psize; + + nv50_sprite_coords_validate(nv50); + + if (nv50->dirty & NV50_NEW_FRAGPROG) + return; + psize = nv50->state.semantic_psize & ~NV50_3D_MAP_SEMANTIC_3_PTSZ_EN__MASK; + color = nv50->state.semantic_color & ~NV50_3D_MAP_SEMANTIC_0_CLMP_EN; + + if
Mesa (master): r600g: implement texture barrier
Module: Mesa Branch: master Commit: d04ab396a54d29948363c3353efa5aaa888076a3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d04ab396a54d29948363c3353efa5aaa888076a3 Author: Fredrik Höglund Date: Tue Mar 29 19:52:03 2011 +0200 r600g: implement texture barrier --- src/gallium/drivers/r600/evergreen_state.c|1 + src/gallium/drivers/r600/r600.h |1 + src/gallium/drivers/r600/r600_pipe.h |2 ++ src/gallium/drivers/r600/r600_state.c |8 src/gallium/winsys/r600/drm/r600_hw_context.c | 17 + 5 files changed, 29 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 7743266..8f93eb8 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -920,6 +920,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx) rctx->context.set_viewport_state = evergreen_set_viewport_state; rctx->context.sampler_view_destroy = r600_sampler_view_destroy; rctx->context.redefine_user_buffer = u_default_redefine_user_buffer; + rctx->context.texture_barrier = r600_texture_barrier; } void evergreen_init_config(struct r600_pipe_context *rctx) diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 75b8b50..4256a7e 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -290,6 +290,7 @@ void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int flag_wait); void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence, unsigned offset, unsigned value); +void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags); int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon); void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw); diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index 88aff0e..5b26d1f 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -298,6 +298,8 @@ void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index, struct pipe_resource *buffer); void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info); +void r600_texture_barrier(struct pipe_context *ctx); + /* * common helpers */ diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index d3adf03..e202056 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -934,6 +934,13 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx, } } +void r600_texture_barrier(struct pipe_context *ctx) +{ + struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; + + r600_context_flush_all(&rctx->ctx, S_0085F0_TC_ACTION_ENA(1)); +} + void r600_init_state_functions(struct r600_pipe_context *rctx) { rctx->context.create_blend_state = r600_create_blend_state; @@ -974,6 +981,7 @@ void r600_init_state_functions(struct r600_pipe_context *rctx) rctx->context.set_viewport_state = r600_set_viewport_state; rctx->context.sampler_view_destroy = r600_sampler_view_destroy; rctx->context.redefine_user_buffer = u_default_redefine_user_buffer; + rctx->context.texture_barrier = r600_texture_barrier; } void r600_init_config(struct r600_pipe_context *rctx) diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c index 48bce81..7f8da12 100644 --- a/src/gallium/winsys/r600/drm/r600_hw_context.c +++ b/src/gallium/winsys/r600/drm/r600_hw_context.c @@ -771,6 +771,23 @@ static void rv6xx_context_surface_base_update(struct r600_context *ctx, } } +/* Flushes all surfaces */ +void r600_context_flush_all(struct r600_context *ctx, unsigned flush_flags) +{ + unsigned ndwords = 5; + + if ((ctx->pm4_dirty_cdwords + ndwords + ctx->pm4_cdwords) > ctx->pm4_ndwords) { + /* need to flush */ + r600_context_flush(ctx); + } + + ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing); + ctx->pm4[ctx->pm4_cdwords++] = flush_flags; /* CP_COHER_CNTL */ + ctx->pm4[ctx->pm4_cdwords++] = 0x; /* CP_COHER_SIZE */ + ctx->pm4[ctx->pm4_cdwords++] = 0; /* CP_COHER_BASE */ + ctx->pm4[ctx->pm4_cdwords++] = 0x000A; /* POLL_INTERVAL */ +} + void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags, unsigned flush_mask, struct r600_bo *rbo) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/
Mesa (master): r600g: implement the pipe_screen fence functions
Module: Mesa Branch: master Commit: 948e1eb8e9c166ad5b74abc630d0760768ce78c9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=948e1eb8e9c166ad5b74abc630d0760768ce78c9 Author: Fredrik Höglund Date: Tue Mar 29 19:43:59 2011 +0200 r600g: implement the pipe_screen fence functions v2: Allocate the fences from a single shared buffer object. v3: Allocate the r600_fence structs in blocks of 16. Spin a few times before calling sched_yield in r600_fence_finish(). --- src/gallium/drivers/r600/r600.h |2 + src/gallium/drivers/r600/r600_pipe.c | 145 + src/gallium/drivers/r600/r600_pipe.h | 27 + src/gallium/winsys/r600/drm/r600_hw_context.c | 23 4 files changed, 197 insertions(+), 0 deletions(-) diff --git a/src/gallium/drivers/r600/r600.h b/src/gallium/drivers/r600/r600.h index 0b7d6f7..75b8b50 100644 --- a/src/gallium/drivers/r600/r600.h +++ b/src/gallium/drivers/r600/r600.h @@ -288,6 +288,8 @@ void r600_context_queries_suspend(struct r600_context *ctx); void r600_context_queries_resume(struct r600_context *ctx); void r600_query_predication(struct r600_context *ctx, struct r600_query *query, int operation, int flag_wait); +void r600_context_emit_fence(struct r600_context *ctx, struct r600_bo *fence, + unsigned offset, unsigned value); int evergreen_context_init(struct r600_context *ctx, struct radeon *radeon); void evergreen_context_draw(struct r600_context *ctx, const struct r600_draw *draw); diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index 0e28bda..c5fc2ba 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -37,6 +37,7 @@ #include #include #include "util/u_upload_mgr.h" +#include "os/os_time.h" #include #include "r600.h" #include "r600d.h" @@ -48,15 +49,82 @@ /* * pipe_context */ +static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx) +{ + struct r600_fence *fence = NULL; + + if (!ctx->fences.bo) { + /* Create the shared buffer object */ + ctx->fences.bo = r600_bo(ctx->radeon, 4096, 0, 0, 0); + if (!ctx->fences.bo) { + R600_ERR("r600: failed to create bo for fence objects\n"); + return NULL; + } + ctx->fences.data = r600_bo_map(ctx->radeon, ctx->fences.bo, PB_USAGE_UNSYNCHRONIZED, NULL); + } + + if (!LIST_IS_EMPTY(&ctx->fences.pool)) { + struct r600_fence *entry; + + /* Try to find a freed fence that has been signalled */ + LIST_FOR_EACH_ENTRY(entry, &ctx->fences.pool, head) { + if (ctx->fences.data[entry->index] != 0) { + LIST_DELINIT(&entry->head); + fence = entry; + break; + } + } + } + + if (!fence) { + /* Allocate a new fence */ + struct r600_fence_block *block; + unsigned index; + + if ((ctx->fences.next_index + 1) >= 1024) { + R600_ERR("r600: too many concurrent fences\n"); + return NULL; + } + + index = ctx->fences.next_index++; + + if (!(index % FENCE_BLOCK_SIZE)) { + /* Allocate a new block */ + block = CALLOC_STRUCT(r600_fence_block); + if (block == NULL) + return NULL; + + LIST_ADD(&block->head, &ctx->fences.blocks); + } else { + block = LIST_ENTRY(struct r600_fence_block, ctx->fences.blocks.next, head); + } + + fence = &block->fences[index % FENCE_BLOCK_SIZE]; + fence->ctx = ctx; + fence->index = index; + } + + pipe_reference_init(&fence->reference, 1); + + ctx->fences.data[fence->index] = 0; + r600_context_emit_fence(&ctx->ctx, ctx->fences.bo, fence->index, 1); + return fence; +} + static void r600_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence) { struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx; + struct r600_fence **rfence = (struct r600_fence**)fence; + #if 0 static int dc = 0; char dname[256]; #endif + if (rfence) + *rfence = r600_create_fence(rctx); + if (!rctx->ctx.pm4_cdwords) return; @@ -112,6 +180,18 @@ static void r600_destroy_context(struct pipe_context *context) u_vbuf_mgr_destroy(rctx->vbuf_mgr); util_slab_destroy(&rctx->pool_transfers); + if (rctx->fences.bo) { + struct r600_fence_block *entry, *tmp; + +
Mesa (master): mesa: Fix ugly indentation left from previous commit
Module: Mesa Branch: master Commit: a99e80d795f7c6aec0e73369a31d1728577b9727 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a99e80d795f7c6aec0e73369a31d1728577b9727 Author: Ian Romanick Date: Thu Mar 24 18:31:05 2011 -0700 mesa: Fix ugly indentation left from previous commit Reviewed-by: Eric Anholt Reviewed-by: Chad Versace --- src/mesa/drivers/dri/i965/brw_fs.cpp | 48 - src/mesa/program/ir_to_mesa.cpp | 31 ++--- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index cf05fb4..bea6b18 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -402,31 +402,29 @@ fs_visitor::setup_builtin_uniform_values(ir_variable *ir) const ir_state_slot *const slots = ir->state_slots; assert(ir->state_slots != NULL); - { - for (unsigned int i = 0; i < ir->num_state_slots; i++) { -/* This state reference has already been setup by ir_to_mesa, - * but we'll get the same index back here. - */ -int index = _mesa_add_state_reference(this->fp->Base.Parameters, - (gl_state_index *)slots[i].tokens); + for (unsigned int i = 0; i < ir->num_state_slots; i++) { + /* This state reference has already been setup by ir_to_mesa, but we'll + * get the same index back here. + */ + int index = _mesa_add_state_reference(this->fp->Base.Parameters, + (gl_state_index *)slots[i].tokens); -/* Add each of the unique swizzles of the element as a - * parameter. This'll end up matching the expected layout of - * the array/matrix/structure we're trying to fill in. - */ -int last_swiz = -1; -for (unsigned int j = 0; j < 4; j++) { - int swiz = GET_SWZ(slots[i].swizzle, j); - if (swiz == last_swiz) - break; - last_swiz = swiz; + /* Add each of the unique swizzles of the element as a parameter. + * This'll end up matching the expected layout of the + * array/matrix/structure we're trying to fill in. + */ + int last_swiz = -1; + for (unsigned int j = 0; j < 4; j++) { +int swiz = GET_SWZ(slots[i].swizzle, j); +if (swiz == last_swiz) + break; +last_swiz = swiz; - c->prog_data.param_convert[c->prog_data.nr_params] = - PARAM_NO_CONVERT; - this->param_index[c->prog_data.nr_params] = index; - this->param_offset[c->prog_data.nr_params] = swiz; - c->prog_data.nr_params++; -} +c->prog_data.param_convert[c->prog_data.nr_params] = + PARAM_NO_CONVERT; +this->param_index[c->prog_data.nr_params] = index; +this->param_offset[c->prog_data.nr_params] = swiz; +c->prog_data.nr_params++; } } } diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 4cca2b7..bf2513d 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -795,26 +795,25 @@ ir_to_mesa_visitor::visit(ir_variable *ir) } - { -for (unsigned int i = 0; i < ir->num_state_slots; i++) { - int index = _mesa_add_state_reference(this->prog->Parameters, - (gl_state_index *)slots[i].tokens); - - if (storage->file == PROGRAM_STATE_VAR) { - if (storage->index == -1) { - storage->index = index; - } else { - assert(index == storage->index + (int)i); - } + for (unsigned int i = 0; i < ir->num_state_slots; i++) { +int index = _mesa_add_state_reference(this->prog->Parameters, + (gl_state_index *)slots[i].tokens); + +if (storage->file == PROGRAM_STATE_VAR) { + if (storage->index == -1) { + storage->index = index; } else { - ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL); - src.swizzle = slots[i].swizzle; - ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src); - /* even a float takes up a whole vec4 reg in a struct/array. */ - dst.index++; + assert(index == storage->index + (int)i); } +} else { + ir_to_mesa_src_reg src(PROGRAM_STATE_VAR, index, NULL); + src.swizzle = slots[i].swizzle; + ir_to_mesa_emit_op1(ir, OPCODE_MOV, dst, src); + /* even a float takes up a whole vec4 reg in a struct/array. */ + dst.index++; } } + if (storage->file == PROGRAM_TEMPORARY && dst.index != storage->index + ir->num_state_slots) { fail_link(this->shader_program, ___
Mesa (master): glsl: Move _mesa_builtin_uniform_desc from uniforms. c to ir_variable.cpp
Module: Mesa Branch: master Commit: 92e412e788931ad464125113a64eec8a8223cda3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=92e412e788931ad464125113a64eec8a8223cda3 Author: Ian Romanick Date: Mon Jan 24 16:55:50 2011 -0800 glsl: Move _mesa_builtin_uniform_desc from uniforms.c to ir_variable.cpp This array is going to be used in the main compiler soon. Leaving them uniforms.c caused problems for building the stand-alone compiler. Reviewed-by: Eric Anholt Reviewed-by: Chad Versace --- src/glsl/ir_variable.cpp | 253 ++ src/mesa/main/uniforms.c | 248 - 2 files changed, 253 insertions(+), 248 deletions(-) diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index 68d9ab2..c271525 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -25,6 +25,10 @@ #include "glsl_parser_extras.h" #include "glsl_symbol_table.h" #include "builtin_variables.h" +#include "main/uniforms.h" +#include "program/prog_parameter.h" +#include "program/prog_statevars.h" +#include "program/prog_instruction.h" static void generate_ARB_draw_buffers_variables(exec_list *, struct _mesa_glsl_parse_state *, @@ -35,6 +39,255 @@ generate_ARB_draw_instanced_variables(exec_list *, struct _mesa_glsl_parse_state *, bool, _mesa_glsl_parser_targets); +static struct gl_builtin_uniform_element gl_DepthRange_elements[] = { + {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, + {"far", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, + {"diff", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_ClipPlane_elements[] = { + {NULL, {STATE_CLIPPLANE, 0, 0}, SWIZZLE_XYZW} +}; + +static struct gl_builtin_uniform_element gl_Point_elements[] = { + {"size", {STATE_POINT_SIZE}, SWIZZLE_}, + {"sizeMin", {STATE_POINT_SIZE}, SWIZZLE_}, + {"sizeMax", {STATE_POINT_SIZE}, SWIZZLE_}, + {"fadeThresholdSize", {STATE_POINT_SIZE}, SWIZZLE_}, + {"distanceConstantAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_}, + {"distanceLinearAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_}, + {"distanceQuadraticAttenuation", {STATE_POINT_ATTENUATION}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_FrontMaterial_elements[] = { + {"emission", {STATE_MATERIAL, 0, STATE_EMISSION}, SWIZZLE_XYZW}, + {"ambient", {STATE_MATERIAL, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {"diffuse", {STATE_MATERIAL, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {"specular", {STATE_MATERIAL, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, + {"shininess", {STATE_MATERIAL, 0, STATE_SHININESS}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_BackMaterial_elements[] = { + {"emission", {STATE_MATERIAL, 1, STATE_EMISSION}, SWIZZLE_XYZW}, + {"ambient", {STATE_MATERIAL, 1, STATE_AMBIENT}, SWIZZLE_XYZW}, + {"diffuse", {STATE_MATERIAL, 1, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {"specular", {STATE_MATERIAL, 1, STATE_SPECULAR}, SWIZZLE_XYZW}, + {"shininess", {STATE_MATERIAL, 1, STATE_SHININESS}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_LightSource_elements[] = { + {"ambient", {STATE_LIGHT, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {"diffuse", {STATE_LIGHT, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {"specular", {STATE_LIGHT, 0, STATE_SPECULAR}, SWIZZLE_XYZW}, + {"position", {STATE_LIGHT, 0, STATE_POSITION}, SWIZZLE_XYZW}, + {"halfVector", {STATE_LIGHT, 0, STATE_HALF_VECTOR}, SWIZZLE_XYZW}, + {"spotDirection", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, +MAKE_SWIZZLE4(SWIZZLE_X, + SWIZZLE_Y, + SWIZZLE_Z, + SWIZZLE_Z)}, + {"spotCosCutoff", {STATE_LIGHT, 0, STATE_SPOT_DIRECTION}, SWIZZLE_}, + {"spotCutoff", {STATE_LIGHT, 0, STATE_SPOT_CUTOFF}, SWIZZLE_}, + {"spotExponent", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {"constantAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {"linearAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, + {"quadraticAttenuation", {STATE_LIGHT, 0, STATE_ATTENUATION}, SWIZZLE_}, +}; + +static struct gl_builtin_uniform_element gl_LightModel_elements[] = { + {"ambient", {STATE_LIGHTMODEL_AMBIENT, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightModelProduct_elements[] = { + {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 0}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_BackLightModelProduct_elements[] = { + {"sceneColor", {STATE_LIGHTMODEL_SCENECOLOR, 1}, SWIZZLE_XYZW}, +}; + +static struct gl_builtin_uniform_element gl_FrontLightProduct_elements[] = { + {"ambient", {STATE_LIGHTPROD, 0, 0, STATE_AMBIENT}, SWIZZLE_XYZW}, + {"diffuse", {STATE_LIGHTPROD, 0, 0, STATE_DIFFUSE}, SWIZZLE_XYZW}, + {"specular", {STATE_LIGHTPROD, 0, 0, STAT
Mesa (master): glsl: Calcluate Mesa state slots in front-end instead of back-end
Module: Mesa Branch: master Commit: 89d81ab16c05818b290ed735c1343d3abde449bf URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=89d81ab16c05818b290ed735c1343d3abde449bf Author: Ian Romanick Date: Tue Jan 25 10:41:20 2011 -0800 glsl: Calcluate Mesa state slots in front-end instead of back-end This should be the last bit of infrastructure changes before generating GLSL IR for assembly shaders. This commit leaves some odd code formatting in ir_to_mesa and brw_fs. This was done to minimize whitespace changes / reindentation in some loops. The following commit will restore formatting sanity. Reviewed-by: Eric Anholt Reviewed-by: Chad Versace --- src/glsl/ir.h| 26 src/glsl/ir_clone.cpp| 12 +++ src/glsl/ir_variable.cpp | 46 ++-- src/glsl/linker.cpp | 13 src/mesa/drivers/dri/i965/brw_fs.cpp | 37 --- src/mesa/program/ir_to_mesa.cpp | 56 ++--- 6 files changed, 117 insertions(+), 73 deletions(-) diff --git a/src/glsl/ir.h b/src/glsl/ir.h index 39d4ebc..a419843 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -253,6 +253,16 @@ enum ir_depth_layout { const char* depth_layout_string(ir_depth_layout layout); +/** + * Description of built-in state associated with a uniform + * + * \sa ir_variable::state_slots + */ +struct ir_state_slot { + int tokens[5]; + int swizzle; +}; + class ir_variable : public ir_instruction { public: ir_variable(const struct glsl_type *, const char *, ir_variable_mode); @@ -386,6 +396,22 @@ public: int location; /** +* Built-in state that backs this uniform +* +* Once set at variable creation, \c state_slots must remain invariant. +* This is because, ideally, this array would be shared by all clones of +* this variable in the IR tree. In other words, we'd really like for it +* to be a fly-weight. +* +* If the variable is not a uniform, \c num_state_slots will be zero and +* \c state_slots will be \c NULL. +*/ + /*@{*/ + unsigned num_state_slots;/**< Number of state slots used */ + ir_state_slot *state_slots; /**< State descriptors. */ + /*@}*/ + + /** * Emit a warning if this variable is accessed. */ const char *warn_extension; diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp index 2c0574d..069bb85 100644 --- a/src/glsl/ir_clone.cpp +++ b/src/glsl/ir_clone.cpp @@ -53,6 +53,18 @@ ir_variable::clone(void *mem_ctx, struct hash_table *ht) const var->origin_upper_left = this->origin_upper_left; var->pixel_center_integer = this->pixel_center_integer; var->explicit_location = this->explicit_location; + + var->num_state_slots = this->num_state_slots; + if (this->state_slots) { + /* FINISHME: This really wants to use something like talloc_reference, but + * FINISHME: ralloc doesn't have any similar function. + */ + var->state_slots = ralloc_array(var, ir_state_slot, + this->num_state_slots); + memcpy(var->state_slots, this->state_slots, +sizeof(this->state_slots[0]) * var->num_state_slots); + } + if (this->explicit_location) var->location = this->location; diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp index c271525..f357717 100644 --- a/src/glsl/ir_variable.cpp +++ b/src/glsl/ir_variable.cpp @@ -327,7 +327,43 @@ static ir_variable * add_uniform(exec_list *instructions, glsl_symbol_table *symtab, const char *name, const glsl_type *type) { - return add_variable(instructions, symtab, name, type, ir_var_uniform, -1); + ir_variable *const uni = + add_variable(instructions, symtab, name, type, ir_var_uniform, -1); + + unsigned i; + for (i = 0; _mesa_builtin_uniform_desc[i].name != NULL; i++) { + if (strcmp(_mesa_builtin_uniform_desc[i].name, name) == 0) { +break; + } + } + + assert(_mesa_builtin_uniform_desc[i].name != NULL); + const struct gl_builtin_uniform_desc* const statevar = + &_mesa_builtin_uniform_desc[i]; + + const unsigned array_count = type->is_array() ? type->length : 1; + uni->num_state_slots = array_count * statevar->num_elements; + + ir_state_slot *slots = + ralloc_array(uni, ir_state_slot, uni->num_state_slots); + + uni->state_slots = slots; + + for (unsigned a = 0; a < array_count; a++) { + for (unsigned j = 0; j < statevar->num_elements; j++) { +struct gl_builtin_uniform_element *element = &statevar->elements[j]; + +memcpy(slots->tokens, element->tokens, sizeof(element->tokens)); +if (type->is_array()) { + slots->tokens[1] = a; +} + +slots->swizzle = element->swizzle; +slots++; + } + } + + return uni; } static void @@ -341,8 +377,12 @@ add_builtin_variable(exec_list *instructions, glsl_symbol_table *symtab,
Mesa (master): r300g: add support for all render targets with one and two channels
Module: Mesa Branch: master Commit: 0420ae3d9069ff5cbe067bdd5c6075d9292dbe66 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0420ae3d9069ff5cbe067bdd5c6075d9292dbe66 Author: Marek Olšák Date: Tue Mar 29 16:35:13 2011 +0200 r300g: add support for all render targets with one and two channels The hardware should be set according to this table: FORMAT -> R300 COLORFORMAT - X16-> UV88 X16Y16 -> ARGB X32-> ARGB X32Y32 -> ARGB16161616 US_OUT_FMT must contain the real format. I wasn't able to make B3G3R2 and L4A4 work, but those aren't important. --- src/gallium/drivers/r300/r300_texture.c | 160 +-- 1 files changed, 130 insertions(+), 30 deletions(-) diff --git a/src/gallium/drivers/r300/r300_texture.c b/src/gallium/drivers/r300/r300_texture.c index 57e0c61..6214380 100644 --- a/src/gallium/drivers/r300/r300_texture.c +++ b/src/gallium/drivers/r300/r300_texture.c @@ -404,6 +404,19 @@ static uint32_t r300_translate_colorformat(enum pipe_format format) case PIPE_FORMAT_L8A8_SNORM: case PIPE_FORMAT_R8G8_UNORM: case PIPE_FORMAT_R8G8_SNORM: +/* These formats work fine with UV88 if US_OUT_FMT is set correctly. */ +case PIPE_FORMAT_A16_UNORM: +case PIPE_FORMAT_A16_SNORM: +/*case PIPE_FORMAT_A16_FLOAT:*/ +case PIPE_FORMAT_L16_UNORM: +case PIPE_FORMAT_L16_SNORM: +/*case PIPE_FORMAT_L16_FLOAT:*/ +case PIPE_FORMAT_I16_UNORM: +case PIPE_FORMAT_I16_SNORM: +/*case PIPE_FORMAT_I16_FLOAT:*/ +case PIPE_FORMAT_R16_UNORM: +case PIPE_FORMAT_R16_SNORM: +case PIPE_FORMAT_R16_FLOAT: return R300_COLOR_FORMAT_UV88; case PIPE_FORMAT_B5G6R5_UNORM: @@ -434,19 +447,33 @@ static uint32_t r300_translate_colorformat(enum pipe_format format) /*case PIPE_FORMAT_X8B8G8R8_SNORM:*/ case PIPE_FORMAT_R8G8B8X8_UNORM: /*case PIPE_FORMAT_R8G8B8X8_SNORM:*/ -case PIPE_FORMAT_R8SG8SB8UX8U_NORM: +/* These formats work fine with ARGB if US_OUT_FMT is set + * correctly. */ +case PIPE_FORMAT_R16G16_UNORM: +case PIPE_FORMAT_R16G16_SNORM: +case PIPE_FORMAT_R16G16_FLOAT: +case PIPE_FORMAT_L16A16_UNORM: +case PIPE_FORMAT_L16A16_SNORM: +/*case PIPE_FORMAT_L16A16_FLOAT: +case PIPE_FORMAT_A32_FLOAT: +case PIPE_FORMAT_L32_FLOAT: +case PIPE_FORMAT_I32_FLOAT:*/ +case PIPE_FORMAT_R32_FLOAT: return R300_COLOR_FORMAT_ARGB; case PIPE_FORMAT_R10G10B10A2_UNORM: case PIPE_FORMAT_R10G10B10X2_SNORM: case PIPE_FORMAT_B10G10R10A2_UNORM: -case PIPE_FORMAT_R10SG10SB10SA2U_NORM: return R500_COLOR_FORMAT_ARGB2101010; /* R5xx-only? */ /* 64-bit buffers. */ case PIPE_FORMAT_R16G16B16A16_UNORM: case PIPE_FORMAT_R16G16B16A16_SNORM: case PIPE_FORMAT_R16G16B16A16_FLOAT: +/* These formats work fine with ARGB16161616 if US_OUT_FMT is set + * correctly. */ +case PIPE_FORMAT_R32G32_FLOAT: +/*case PIPE_FORMAT_L32A32_FLOAT:*/ return R300_COLOR_FORMAT_ARGB16161616; /* 128-bit buffers. */ @@ -489,12 +516,7 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format) uint32_t modifier = 0; unsigned i; const struct util_format_description *desc; -static const uint32_t sign_bit[4] = { -R300_OUT_SIGN(0x4), -R300_OUT_SIGN(0x2), -R300_OUT_SIGN(0x1), -R300_OUT_SIGN(0x8), -}; +boolean uniform_sign; desc = util_format_description(format); @@ -509,34 +531,82 @@ static uint32_t r300_translate_out_fmt(enum pipe_format format) return ~0; /* Unsupported/unknown. */ /* Specifies how the shader output is written to the fog unit. */ -if (desc->channel[i].type == UTIL_FORMAT_TYPE_FLOAT) { -if (desc->channel[i].size == 32) { -modifier |= R300_US_OUT_FMT_C4_32_FP; -} else { -modifier |= R300_US_OUT_FMT_C4_16_FP; +switch (desc->channel[i].type) { +case UTIL_FORMAT_TYPE_FLOAT: +switch (desc->channel[i].size) { +case 32: +switch (desc->nr_channels) { +case 1: +modifier |= R300_US_OUT_FMT_C_32_FP; +break; +case 2: +modifier |= R300_US_OUT_FMT_C2_32_FP; +break; +case 4: +modifier |= R300_US_OUT_FMT_C4_32_FP; +break; +} +break; + +case 16: +switch (desc->nr_channels) { +case 1: +modifier |= R300_US_OUT_FMT_C_16_FP; +break; +case 2: +modifier |= R300_US_OUT_FMT_C2_16_FP; +break; +case 4: +modifier |= R300_US_OUT_FMT_C4_16_FP; +
Mesa (master): intel: fix build
Module: Mesa Branch: master Commit: 7d41857566d900aee3319f06c272049e6211acc1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7d41857566d900aee3319f06c272049e6211acc1 Author: Marek Olšák Date: Tue Mar 29 18:01:44 2011 +0200 intel: fix build broken with e5c6a92a12b5cd7db205d72039f58d302b0be9d5 (mesa: implement clamping controls (ARB_color_buffer_float)) --- src/mesa/drivers/dri/i915/i915_fragprog.c |2 +- src/mesa/drivers/dri/i965/brw_program.c |2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c b/src/mesa/drivers/dri/i915/i915_fragprog.c index 89de2a8..7286e2b 100644 --- a/src/mesa/drivers/dri/i915/i915_fragprog.c +++ b/src/mesa/drivers/dri/i915/i915_fragprog.c @@ -1291,7 +1291,7 @@ i915ProgramStringNotify(struct gl_context * ctx, */ if (p->FragProg.FogOption) { /* add extra instructions to do fog, then turn off FogOption field */ - _mesa_append_fog_code(ctx, &p->FragProg, TRUE); + _mesa_append_fog_code(ctx, &p->FragProg, GL_TRUE); p->FragProg.FogOption = GL_NONE; } } diff --git a/src/mesa/drivers/dri/i965/brw_program.c b/src/mesa/drivers/dri/i965/brw_program.c index 2132b82..b5ec55b 100644 --- a/src/mesa/drivers/dri/i965/brw_program.c +++ b/src/mesa/drivers/dri/i965/brw_program.c @@ -135,7 +135,7 @@ static GLboolean brwProgramStringNotify( struct gl_context *ctx, struct gl_shader_program *shader_program; if (fprog->FogOption) { - _mesa_append_fog_code(ctx, fprog, TRUE); + _mesa_append_fog_code(ctx, fprog, GL_TRUE); fprog->FogOption = GL_NONE; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): intel: Protect intel_clear_with_blit from failed buffer allocations
Module: Mesa Branch: master Commit: 7bae1c3d85344b7229e0124d1f54376392682430 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bae1c3d85344b7229e0124d1f54376392682430 Author: Chris Wilson Date: Tue Mar 29 15:40:21 2011 +0100 intel: Protect intel_clear_with_blit from failed buffer allocations Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34419 Signed-off-by: Chris Wilson --- src/mesa/drivers/dri/intel/intel_blit.c | 21 +++-- 1 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_blit.c b/src/mesa/drivers/dri/intel/intel_blit.c index e1ab7f1..d6a648c 100644 --- a/src/mesa/drivers/dri/intel/intel_blit.c +++ b/src/mesa/drivers/dri/intel/intel_blit.c @@ -239,12 +239,12 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) if (cw == 0 || ch == 0) return 0; - GLuint buf; all = (cw == fb->Width && ch == fb->Height); /* Loop over all renderbuffers */ - for (buf = 0; buf < BUFFER_COUNT && mask; buf++) { - const GLbitfield bufBit = 1 << buf; + mask &= (1 << BUFFER_COUNT) - 1; + while (mask) { + GLuint buf = _mesa_ffs(mask) - 1; struct intel_renderbuffer *irb; drm_intel_bo *write_buffer; int x1, y1, x2, y2; @@ -253,11 +253,15 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) int pitch, cpp; drm_intel_bo *aper_array[2]; - if (!(mask & bufBit)) -continue; + mask &= ~(1 << buf); - /* OK, clear this renderbuffer */ irb = intel_get_renderbuffer(fb, buf); + if (irb == NULL || irb->region == NULL || irb->region->buffer == NULL) { + fail_mask |= 1 << buf; + continue; + } + + /* OK, clear this renderbuffer */ write_buffer = intel_region_buffer(intel, irb->region, all ? INTEL_WRITE_FULL : INTEL_WRITE_PART); @@ -333,8 +337,7 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) clear[3], clear[3]); break; default: - fail_mask |= bufBit; - mask &= ~bufBit; + fail_mask |= 1 << buf; continue; } } @@ -367,8 +370,6 @@ intelClearWithBlit(struct gl_context *ctx, GLbitfield mask) if (buf == BUFFER_DEPTH || buf == BUFFER_STENCIL) mask &= ~(BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL); - else -mask &= ~bufBit;/* turn off bit, for faster loop exit */ } return fail_mask; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: Avoid name clash of loop counter and member
Module: Mesa Branch: master Commit: 252eaa765e69a70036ec33a7e1e0ffeac1aab2ff URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=252eaa765e69a70036ec33a7e1e0ffeac1aab2ff Author: Chris Wilson Date: Tue Mar 29 15:39:01 2011 +0100 i965: Avoid name clash of loop counter and member src/mesa/drivers/dri/i965/brw_fs.cpp:565 warning: name lookup of ‘c’ changed Signed-off-by: Chris Wilson --- src/mesa/drivers/dri/i965/brw_fs.cpp | 10 +- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index b2336b7..bdf0523 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -547,16 +547,16 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) * handed us defined values in only the constant offset * field of the setup reg. */ - for (unsigned int c = 0; c < type->vector_elements; c++) { - struct brw_reg interp = interp_reg(location, c); + for (unsigned int k = 0; k < type->vector_elements; k++) { + struct brw_reg interp = interp_reg(location, k); interp = suboffset(interp, 3); emit(FS_OPCODE_CINTERP, attr, fs_reg(interp)); attr.reg_offset++; } } else { /* Perspective interpolation case. */ - for (unsigned int c = 0; c < type->vector_elements; c++) { - struct brw_reg interp = interp_reg(location, c); + for (unsigned int k = 0; k < type->vector_elements; k++) { + struct brw_reg interp = interp_reg(location, k); emit(FS_OPCODE_LINTERP, attr, this->delta_x, this->delta_y, fs_reg(interp)); attr.reg_offset++; @@ -564,7 +564,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) if (intel->gen < 6 && !(is_gl_Color && c->key.linear_color)) { attr.reg_offset -= type->vector_elements; - for (unsigned int c = 0; c < type->vector_elements; c++) { + for (unsigned int k = 0; k < type->vector_elements; k++) { emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w); attr.reg_offset++; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i915: Detect allocation failure of batch buffer
Module: Mesa Branch: master Commit: b094dff50a05e56f5415d31daa5e4542f321c858 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b094dff50a05e56f5415d31daa5e4542f321c858 Author: Chris Wilson Date: Thu Mar 10 18:01:32 2011 + i915: Detect allocation failure of batch buffer Signed-off-by: Chris Wilson --- src/mesa/drivers/dri/i915/i915_vtbl.c |4 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c b/src/mesa/drivers/dri/i915/i915_vtbl.c index 921183b..942ebec 100644 --- a/src/mesa/drivers/dri/i915/i915_vtbl.c +++ b/src/mesa/drivers/dri/i915/i915_vtbl.c @@ -307,6 +307,10 @@ i915_emit_state(struct intel_context *intel) false); count = 0; again: + if (intel->batch.bo == NULL) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "i915 emit state"); + assert(0); + } aper_count = 0; dirty = get_dirty(state); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): docs: update GL3 status
Module: Mesa Branch: master Commit: 8cbdfe1de4a5793d2d43dca81dd8996419b7aeed URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8cbdfe1de4a5793d2d43dca81dd8996419b7aeed Author: Marek Olšák Date: Tue Mar 29 13:03:26 2011 +0200 docs: update GL3 status --- docs/GL3.txt |4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/GL3.txt b/docs/GL3.txt index ca265af..c704699 100644 --- a/docs/GL3.txt +++ b/docs/GL3.txt @@ -15,7 +15,7 @@ GL 3.0: GLSL changes (GL_EXT_gpu_shader4, etc)not started Conditional rendering (GL_NV_conditional_render) DONE (swrast & softpipe) Map buffer subranges (GL_ARB_map_buffer_range)DONE -Clamping controls (GL_ARB_color_buffer_float) BRANCH ~mareko/mesa floating2 +Clamping controls (GL_ARB_color_buffer_float) DONE Float textures, renderbuffers (GL_ARB_texture_float) BRANCH ~mareko/mesa floating2 GL_EXT_packed_float not started GL_EXT_texture_shared_exponentnot started @@ -53,7 +53,7 @@ Primitive restart (GL_NV_primitive_restart) DONE (gallium) Texture buffer objs (GL_ARB_texture_buffer_object)not started Rectangular textures (GL_ARB_texture_rectangle) DONE Uniform buffer objs (GL_ARB_uniform_buffer_object)not started -Signed normalized textures (GL_EXT_texture_snorm) ~50% done +Signed normalized textures (GL_EXT_texture_snorm) DONE (gallium) GL 3.2: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r300g: finish up signed normalized textures and render targets
Module: Mesa Branch: master Commit: 2e6a69939c26ab8cc27bcab29ed64cec5e9428ee URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2e6a69939c26ab8cc27bcab29ed64cec5e9428ee Author: Marek Olšák Date: Mon Mar 14 16:37:15 2011 +0100 r300g: finish up signed normalized textures and render targets --- src/gallium/drivers/r300/r300_state_derived.c | 40 +--- src/gallium/drivers/r300/r300_texture.c | 34 +++-- 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c index ec00e25..50cde55 100644 --- a/src/gallium/drivers/r300/r300_state_derived.c +++ b/src/gallium/drivers/r300/r300_state_derived.c @@ -592,6 +592,13 @@ static void r300_update_rs_block(struct r300_context *r300) } } +static void rgba_to_bgra(float color[4]) +{ +float x = color[0]; +color[0] = color[2]; +color[2] = x; +} + static uint32_t r300_get_border_color(enum pipe_format format, const float border[4], boolean is_r500) @@ -625,13 +632,13 @@ static uint32_t r300_get_border_color(enum pipe_format format, for (i = 0; i < 4; i++) { switch (desc->swizzle[i]) { case UTIL_FORMAT_SWIZZLE_X: -border_swizzled[2] = border[i]; +border_swizzled[0] = border[i]; break; case UTIL_FORMAT_SWIZZLE_Y: border_swizzled[1] = border[i]; break; case UTIL_FORMAT_SWIZZLE_Z: -border_swizzled[0] = border[i]; +border_swizzled[2] = border[i]; break; case UTIL_FORMAT_SWIZZLE_W: border_swizzled[3] = border[i]; @@ -648,34 +655,36 @@ static uint32_t r300_get_border_color(enum pipe_format format, case PIPE_FORMAT_LATC1_UNORM: /* Add 1/32 to round the border color instead of truncating. */ /* The Y component is used for the border color. */ -border_swizzled[1] = border_swizzled[2] + 1.0f/32; +border_swizzled[1] = border_swizzled[0] + 1.0f/32; util_pack_color(border_swizzled, PIPE_FORMAT_B4G4R4A4_UNORM, &uc); return uc.ui; case PIPE_FORMAT_RGTC2_SNORM: case PIPE_FORMAT_LATC2_SNORM: -border_swizzled[0] = border_swizzled[2]; util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_SNORM, &uc); return uc.ui; case PIPE_FORMAT_RGTC2_UNORM: case PIPE_FORMAT_LATC2_UNORM: -util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); +util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc); return uc.ui; default: -util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc); +util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); return uc.ui; } } switch (desc->channel[0].size) { case 2: +rgba_to_bgra(border_swizzled); util_pack_color(border_swizzled, PIPE_FORMAT_B2G3R3_UNORM, &uc); break; case 4: +rgba_to_bgra(border_swizzled); util_pack_color(border_swizzled, PIPE_FORMAT_B4G4R4A4_UNORM, &uc); break; case 5: +rgba_to_bgra(border_swizzled); if (desc->channel[1].size == 5) { util_pack_color(border_swizzled, PIPE_FORMAT_B5G5R5A1_UNORM, &uc); } else if (desc->channel[1].size == 6) { @@ -687,32 +696,39 @@ static uint32_t r300_get_border_color(enum pipe_format format, default: case 8: -util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); +if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) + util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_SNORM, &uc); +else + util_pack_color(border_swizzled, PIPE_FORMAT_R8G8B8A8_UNORM, &uc); break; case 10: -util_pack_color(border_swizzled, PIPE_FORMAT_B10G10R10A2_UNORM, &uc); +util_pack_color(border_swizzled, PIPE_FORMAT_R10G10B10A2_UNORM, &uc); break; case 16: if (desc->nr_channels <= 2) { -border_swizzled[0] = border_swizzled[2]; if (desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT) { util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_FLOAT, &uc); +} else if (desc->channel[0].type == UTIL_FORMAT_TYPE_SIGNED) { +util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_SNORM, &uc); } else { util_pack_color(border_swizzled, PIPE_FORMAT_R16G16_UNORM, &uc); } } else { -util_pack_color(border_swizzled, PIPE_FORMAT_B8G8R8A8_UNORM, &uc); +
Mesa (master): r300g: enable clamping controls
Module: Mesa Branch: master Commit: f03791467090db49e5c3d6111cd8d2a7cbe31d75 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f03791467090db49e5c3d6111cd8d2a7cbe31d75 Author: Marek Olšák Date: Wed Feb 16 00:50:25 2011 +0100 r300g: enable clamping controls --- src/gallium/drivers/r300/r300_context.h |2 ++ src/gallium/drivers/r300/r300_fs.c |3 ++- src/gallium/drivers/r300/r300_screen.c |1 + src/gallium/drivers/r300/r300_state.c | 14 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index e395f41..3b6cb8f 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -580,6 +580,8 @@ struct r300_context { int sprite_coord_enable; /* Whether two-sided color selection is enabled (AKA light_twoside). */ boolean two_sided_color; +/* Whether fragment color clamping is enabled. */ +boolean frag_clamp; /* Whether fast color clear is enabled. */ boolean cbzb_clear; /* Whether ZMASK is enabled. */ diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index 4c502fe..37fe662 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -146,10 +146,11 @@ static void get_external_state( struct r300_fragment_program_external_state* state) { struct r300_textures_state *texstate = r300->textures_state.state; +struct r300_rs_state *rs = r300->rs_state.state; unsigned i; unsigned char *swizzle; -state->frag_clamp = 0; +state->frag_clamp = rs ? rs->rs.clamp_fragment_color : 0; for (i = 0; i < texstate->sampler_state_count; i++) { struct r300_sampler_state *s = texstate->sampler_states[i]; diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c index 8a69628..deaeb77 100644 --- a/src/gallium/drivers/r300/r300_screen.c +++ b/src/gallium/drivers/r300/r300_screen.c @@ -114,6 +114,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param) case PIPE_CAP_TEXTURE_MIRROR_REPEAT: case PIPE_CAP_BLEND_EQUATION_SEPARATE: case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR: +case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL: return 1; case PIPE_CAP_TEXTURE_SWIZZLE: return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1; diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index ecb4fc6..890e396 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -398,10 +398,6 @@ static void r300_bind_blend_state(struct pipe_context* pipe, struct r300_context* r300 = r300_context(pipe); UPDATE_STATE(state, r300->blend_state); - -if (r300->fs.state && r300_pick_fragment_shader(r300)) { -r300_mark_fs_code_dirty(r300); -} } /* Free blend state. */ @@ -1047,7 +1043,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe, float point_texcoord_bottom = 0;/* R300_GA_POINT_T0: 0x4204 */ float point_texcoord_right = 1; /* R300_GA_POINT_S1: 0x4208 */ float point_texcoord_top = 0; /* R300_GA_POINT_T1: 0x420c */ -boolean vclamp = TRUE; +boolean vclamp = state->clamp_vertex_color; CB_LOCALS; /* Copy rasterizer state. */ @@ -1233,6 +1229,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state) struct r300_rs_state* rs = (struct r300_rs_state*)state; int last_sprite_coord_enable = r300->sprite_coord_enable; boolean last_two_sided_color = r300->two_sided_color; +boolean last_frag_clamp = r300->frag_clamp; if (r300->draw && rs) { draw_set_rasterizer_state(r300->draw, &rs->rs_draw, state); @@ -1242,10 +1239,12 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state) r300->polygon_offset_enabled = rs->polygon_offset_enable; r300->sprite_coord_enable = rs->rs.sprite_coord_enable; r300->two_sided_color = rs->rs.light_twoside; +r300->frag_clamp = rs->rs.clamp_fragment_color; } else { r300->polygon_offset_enabled = FALSE; r300->sprite_coord_enable = 0; r300->two_sided_color = FALSE; +r300->frag_clamp = FALSE; } UPDATE_STATE(state, r300->rs_state); @@ -1255,6 +1254,11 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state) last_two_sided_color != r300->two_sided_color) { r300_mark_atom_dirty(r300, &r300->rs_block_state); } + +if (last_frag_clamp != r300->frag_clamp && +r300->fs.state && r300_pick_fragment_shader(r300)) { +r300_mark_fs_code_dirty(r300); +} } /* Free rasterizer state. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailm
Mesa (master): gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL
Module: Mesa Branch: master Commit: 8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d4ec87d7f987b3852dafa6802815bb9a3ec7ad4 Author: Marek Olšák Date: Sat Mar 26 13:19:23 2011 +0100 gallium: remove PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL The vertex color clamp control is a property of an API, a lot like gl_rasterization_rules. The state should be set according to the API being implemented, for example: OpenGL Compatibility: enabled by default OpenGL Core: disabled by default D3D11: always disabled This patch also changes the way ARB_color_buffer_float is advertised. If no SNORM or FLOAT render target is supported, fragment color clamping is not required. --- src/gallium/include/pipe/p_defines.h |1 - src/mesa/state_tracker/st_extensions.c | 30 ++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index 4f6daa8..1c1a8f2 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -463,7 +463,6 @@ enum pipe_cap { PIPE_CAP_SHADER_STENCIL_EXPORT, PIPE_CAP_TGSI_INSTANCEID, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, - PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index ba1a0af..e327790 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -514,12 +514,34 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.ARB_depth_clamp = GL_TRUE; } - /* this extension does not actually require support of floating point -* render targets, just clamping controls + /* This extension does not actually require support of floating point +* render targets, just clamping controls. +* Advertise this extension if either fragment color clamping is supported +* or no render targets having color values outside of the range [0, 1] +* are supported, in which case the fragment color clamping has no effect +* on rendering. */ - if(screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) && - screen->get_param(screen, PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL)) + if (screen->get_param(screen, PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL) || + (!screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) && +!screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) && +!screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) && +!screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) && +!screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET) && +!screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_RENDER_TARGET))) { ctx->Extensions.ARB_color_buffer_float = GL_TRUE; + } if (screen->get_param(screen, PIPE_CAP_SHADER_STENCIL_EXPORT)) { ctx->Extensions.ARB_shader_stencil_export = GL_TRUE; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: choose an appropriate texture format for DrawPixels
Module: Mesa Branch: master Commit: b518f4d0ea72dc3872f351250034aa9155756dd3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b518f4d0ea72dc3872f351250034aa9155756dd3 Author: Marek Olšák Date: Tue Mar 15 15:00:02 2011 +0100 st/mesa: choose an appropriate texture format for DrawPixels --- src/mesa/state_tracker/st_cb_drawpixels.c | 52 +++-- 1 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index dc53e27..1707f82 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -296,7 +296,7 @@ base_format(GLenum format) * of the given format and type. */ static GLenum -internal_format(GLenum format, GLenum type) +internal_format(struct gl_context *ctx, GLenum format, GLenum type) { switch (format) { case GL_DEPTH_COMPONENT: @@ -326,7 +326,53 @@ internal_format(GLenum format, GLenum type) } } else { - return GL_RGBA; + switch (type) { + case GL_UNSIGNED_BYTE: + case GL_UNSIGNED_INT_8_8_8_8: + case GL_UNSIGNED_INT_8_8_8_8_REV: + default: +return GL_RGBA8; + + case GL_UNSIGNED_BYTE_3_3_2: + case GL_UNSIGNED_BYTE_2_3_3_REV: + case GL_UNSIGNED_SHORT_4_4_4_4: + case GL_UNSIGNED_SHORT_4_4_4_4_REV: +return GL_RGBA4; + + case GL_UNSIGNED_SHORT_5_6_5: + case GL_UNSIGNED_SHORT_5_6_5_REV: + case GL_UNSIGNED_SHORT_5_5_5_1: + case GL_UNSIGNED_SHORT_1_5_5_5_REV: +return GL_RGB5_A1; + + case GL_UNSIGNED_INT_10_10_10_2: + case GL_UNSIGNED_INT_2_10_10_10_REV: +return GL_RGB10_A2; + + case GL_UNSIGNED_SHORT: + case GL_UNSIGNED_INT: +return GL_RGBA16; + + case GL_BYTE: +return + ctx->Extensions.EXT_texture_snorm ? GL_RGBA8_SNORM : GL_RGBA8; + + case GL_SHORT: + case GL_INT: +return + ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + + case GL_HALF_FLOAT_ARB: +return + ctx->Extensions.ARB_texture_float ? GL_RGBA16F : + ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + + case GL_FLOAT: + case GL_DOUBLE: +return + ctx->Extensions.ARB_texture_float ? GL_RGBA32F : + ctx->Extensions.EXT_texture_snorm ? GL_RGBA16_SNORM : GL_RGBA16; + } } } } @@ -369,7 +415,7 @@ make_texture(struct st_context *st, GLenum baseFormat, intFormat; baseFormat = base_format(format); - intFormat = internal_format(format, type); + intFormat = internal_format(ctx, format, type); mformat = st_ChooseTextureFormat_renderable(ctx, intFormat, format, type, GL_FALSE); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): mesa: clamp texture border color if ARB_texture_float is unsupported
Module: Mesa Branch: master Commit: e28fe8fe5d05c87a065f8e72adef8b5077da2c73 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e28fe8fe5d05c87a065f8e72adef8b5077da2c73 Author: Marek Olšák Date: Sat Mar 26 13:06:22 2011 +0100 mesa: clamp texture border color if ARB_texture_float is unsupported ARB_texture_float disables clamping of the texture border color, ARB_color_buffer_float only modifies clamping of the glGet query. --- src/mesa/main/texparam.c | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c index adb6bce..34b6add 100644 --- a/src/mesa/main/texparam.c +++ b/src/mesa/main/texparam.c @@ -534,10 +534,18 @@ set_tex_parameterf(struct gl_context *ctx, case GL_TEXTURE_BORDER_COLOR: flush(ctx); - texObj->BorderColor.f[RCOMP] = params[0]; - texObj->BorderColor.f[GCOMP] = params[1]; - texObj->BorderColor.f[BCOMP] = params[2]; - texObj->BorderColor.f[ACOMP] = params[3]; + /* ARB_texture_float disables clamping */ + if (ctx->Extensions.ARB_texture_float) { + texObj->BorderColor.f[RCOMP] = params[0]; + texObj->BorderColor.f[GCOMP] = params[1]; + texObj->BorderColor.f[BCOMP] = params[2]; + texObj->BorderColor.f[ACOMP] = params[3]; + } else { + texObj->BorderColor.f[RCOMP] = CLAMP(params[0], 0.0F, 1.0F); + texObj->BorderColor.f[GCOMP] = CLAMP(params[1], 0.0F, 1.0F); + texObj->BorderColor.f[BCOMP] = CLAMP(params[2], 0.0F, 1.0F); + texObj->BorderColor.f[ACOMP] = CLAMP(params[3], 0.0F, 1.0F); + } return GL_TRUE; default: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gallium: add EXT_texture_snorm support
Module: Mesa Branch: master Commit: 2af1da15468d06d3ce9d89bcc706276ecc66f761 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2af1da15468d06d3ce9d89bcc706276ecc66f761 Author: Marek Olšák Date: Mon Mar 14 10:04:36 2011 +0100 gallium: add EXT_texture_snorm support --- src/gallium/auxiliary/util/u_format.csv |8 + src/gallium/include/pipe/p_format.h |9 ++ src/mesa/state_tracker/st_extensions.c |6 + src/mesa/state_tracker/st_format.c | 232 ++- 4 files changed, 253 insertions(+), 2 deletions(-) diff --git a/src/gallium/auxiliary/util/u_format.csv b/src/gallium/auxiliary/util/u_format.csv index 6f5cc61..771bd49 100644 --- a/src/gallium/auxiliary/util/u_format.csv +++ b/src/gallium/auxiliary/util/u_format.csv @@ -88,6 +88,14 @@ PIPE_FORMAT_L16_UNORM , plain, 1, 1, un16, , , , xxx1, r PIPE_FORMAT_A16_UNORM , plain, 1, 1, un16, , , , 000x, rgb PIPE_FORMAT_I16_UNORM , plain, 1, 1, un16, , , , , rgb PIPE_FORMAT_L16A16_UNORM , plain, 1, 1, un16, un16, , , xxxy, rgb +PIPE_FORMAT_A8_SNORM , plain, 1, 1, sn8 , , , , 000x, rgb +PIPE_FORMAT_L8_SNORM , plain, 1, 1, sn8 , , , , xxx1, rgb +PIPE_FORMAT_L8A8_SNORM, plain, 1, 1, sn8 , sn8 , , , xxxy, rgb +PIPE_FORMAT_I8_SNORM , plain, 1, 1, sn8 , , , , , rgb +PIPE_FORMAT_A16_SNORM , plain, 1, 1, sn16, , , , 000x, rgb +PIPE_FORMAT_L16_SNORM , plain, 1, 1, sn16, , , , xxx1, rgb +PIPE_FORMAT_L16A16_SNORM , plain, 1, 1, sn16, sn16, , , xxxy, rgb +PIPE_FORMAT_I16_SNORM , plain, 1, 1, sn16, , , , , rgb # SRGB formats PIPE_FORMAT_L8_SRGB , plain, 1, 1, un8 , , , , xxx1, srgb diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h index d53af59..3ea9a39 100644 --- a/src/gallium/include/pipe/p_format.h +++ b/src/gallium/include/pipe/p_format.h @@ -211,6 +211,15 @@ enum pipe_format { PIPE_FORMAT_LATC2_UNORM = 145, PIPE_FORMAT_LATC2_SNORM = 146, + PIPE_FORMAT_A8_SNORM= 147, + PIPE_FORMAT_L8_SNORM= 148, + PIPE_FORMAT_L8A8_SNORM = 149, + PIPE_FORMAT_I8_SNORM= 150, + PIPE_FORMAT_A16_SNORM = 151, + PIPE_FORMAT_L16_SNORM = 152, + PIPE_FORMAT_L16A16_SNORM= 153, + PIPE_FORMAT_I16_SNORM = 154, + PIPE_FORMAT_COUNT }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 89bb030..ba1a0af 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -453,6 +453,12 @@ void st_init_extensions(struct st_context *st) ctx->Extensions.ATI_texture_compression_3dc = GL_TRUE; } + if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, + PIPE_TEXTURE_2D, 0, + PIPE_BIND_SAMPLER_VIEW)) { + ctx->Extensions.EXT_texture_snorm = GL_TRUE; + } + /* ycbcr support */ if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY, PIPE_TEXTURE_2D, 0, diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 03655ee..957a06c 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -259,6 +259,39 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) case MESA_FORMAT_SIGNED_LA_LATC2: return PIPE_FORMAT_LATC2_SNORM; + /* signed normalized formats */ + case MESA_FORMAT_SIGNED_R8: + return PIPE_FORMAT_R8_SNORM; + case MESA_FORMAT_SIGNED_RG88_REV: + return PIPE_FORMAT_R8G8_SNORM; + case MESA_FORMAT_SIGNED_RGBA_REV: + return PIPE_FORMAT_R8G8B8A8_SNORM; + + case MESA_FORMAT_SIGNED_A8: + return PIPE_FORMAT_A8_SNORM; + case MESA_FORMAT_SIGNED_L8: + return PIPE_FORMAT_L8_SNORM; + case MESA_FORMAT_SIGNED_AL88: + return PIPE_FORMAT_L8A8_SNORM; + case MESA_FORMAT_SIGNED_I8: + return PIPE_FORMAT_I8_SNORM; + + case MESA_FORMAT_SIGNED_R16: + return PIPE_FORMAT_R16_SNORM; + case MESA_FORMAT_SIGNED_GR1616: + return PIPE_FORMAT_R16G16_SNORM; + case MESA_FORMAT_SIGNED_RGBA_16: + return PIPE_FORMAT_R16G16B16A16_SNORM; + + case MESA_FORMAT_SIGNED_A16: + return PIPE_FORMAT_A16_SNORM; + case MESA_FORMAT_SIGNED_L16: + return PIPE_FORMAT_L16_SNORM; + case MESA_FORMAT_SIGNED_AL1616: + return PIPE_FORMAT_L16A16_SNORM; + case MESA_FORMAT_SIGNED_I16: + return PIPE_FORMAT_I16_SNORM; + default: assert(0); return PIPE_FORMAT_NONE; @@ -318,8 +351,6 @@ st_pipe_format_to_mesa_format(enum pipe_format format) case PIPE_FORMAT_R16G16B16
Mesa (master): mesa: implement texstore and texfetch hooks for signed normalized formats
Module: Mesa Branch: master Commit: daa5242f9eafaf61f9f492f1e798de8701e6f498 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=daa5242f9eafaf61f9f492f1e798de8701e6f498 Author: Marek Olšák Date: Sun Mar 13 14:48:09 2011 +0100 mesa: implement texstore and texfetch hooks for signed normalized formats The snorm texstore functions were all broken. swrast support done except for mipmap generation, but I leave it disabled. --- src/mesa/main/texfetch.c | 86 ++-- src/mesa/main/texfetch_tmp.h | 227 +++--- src/mesa/main/texstore.c | 319 ++--- 3 files changed, 514 insertions(+), 118 deletions(-) diff --git a/src/mesa/main/texfetch.c b/src/mesa/main/texfetch.c index 988a7e0..b2181af 100644 --- a/src/mesa/main/texfetch.c +++ b/src/mesa/main/texfetch.c @@ -696,11 +696,11 @@ texfetch_funcs[MESA_FORMAT_COUNT] = store_texel_signed_r8 }, { - MESA_FORMAT_SIGNED_RG88, - fetch_texel_1d_signed_rg88, - fetch_texel_2d_signed_rg88, - fetch_texel_3d_signed_rg88, - store_texel_signed_rg88 + MESA_FORMAT_SIGNED_RG88_REV, + fetch_texel_1d_signed_rg88_rev, + fetch_texel_2d_signed_rg88_rev, + fetch_texel_3d_signed_rg88_rev, + store_texel_signed_rg88_rev }, { MESA_FORMAT_SIGNED_RGBX, @@ -724,18 +724,18 @@ texfetch_funcs[MESA_FORMAT_COUNT] = store_texel_signed_rgba_rev }, { - MESA_FORMAT_SIGNED_R_16, - fetch_texel_1d_signed_r_16, - fetch_texel_2d_signed_r_16, - fetch_texel_3d_signed_r_16, - store_texel_signed_r_16 + MESA_FORMAT_SIGNED_R16, + fetch_texel_1d_signed_r16, + fetch_texel_2d_signed_r16, + fetch_texel_3d_signed_r16, + store_texel_signed_r16 }, { - MESA_FORMAT_SIGNED_RG_16, - fetch_texel_1d_signed_rg_16, - fetch_texel_2d_signed_rg_16, - fetch_texel_3d_signed_rg_16, - store_texel_signed_rg_16 + MESA_FORMAT_SIGNED_GR1616, + fetch_texel_1d_signed_rg1616, + fetch_texel_2d_signed_rg1616, + fetch_texel_3d_signed_rg1616, + store_texel_signed_rg1616 }, { MESA_FORMAT_SIGNED_RGB_16, @@ -814,6 +814,62 @@ texfetch_funcs[MESA_FORMAT_COUNT] = NULL, NULL }, + { + MESA_FORMAT_SIGNED_A8, + fetch_texel_1d_signed_a8, + fetch_texel_2d_signed_a8, + fetch_texel_3d_signed_a8, + store_texel_signed_a8 + }, + { + MESA_FORMAT_SIGNED_L8, + fetch_texel_1d_signed_l8, + fetch_texel_2d_signed_l8, + fetch_texel_3d_signed_l8, + store_texel_signed_l8 + }, + { + MESA_FORMAT_SIGNED_AL88, + fetch_texel_1d_signed_al88, + fetch_texel_2d_signed_al88, + fetch_texel_3d_signed_al88, + store_texel_signed_al88 + }, + { + MESA_FORMAT_SIGNED_I8, + fetch_texel_1d_signed_i8, + fetch_texel_2d_signed_i8, + fetch_texel_3d_signed_i8, + store_texel_signed_i8 + }, + { + MESA_FORMAT_SIGNED_A16, + fetch_texel_1d_signed_a16, + fetch_texel_2d_signed_a16, + fetch_texel_3d_signed_a16, + store_texel_signed_a16 + }, + { + MESA_FORMAT_SIGNED_L16, + fetch_texel_1d_signed_l16, + fetch_texel_2d_signed_l16, + fetch_texel_3d_signed_l16, + store_texel_signed_l16 + }, + { + MESA_FORMAT_SIGNED_AL1616, + fetch_texel_1d_signed_al1616, + fetch_texel_2d_signed_al1616, + fetch_texel_3d_signed_al1616, + store_texel_signed_al1616 + }, + { + MESA_FORMAT_SIGNED_I16, + fetch_texel_1d_signed_i16, + fetch_texel_2d_signed_i16, + fetch_texel_3d_signed_i16, + store_texel_signed_i16 + }, }; diff --git a/src/mesa/main/texfetch_tmp.h b/src/mesa/main/texfetch_tmp.h index 36dede5..f1f6a01 100644 --- a/src/mesa/main/texfetch_tmp.h +++ b/src/mesa/main/texfetch_tmp.h @@ -1673,25 +1673,117 @@ static void store_texel_signed_r8(struct gl_texture_image *texImage, #endif -/* MESA_FORMAT_SIGNED_RG88 ***/ +/* MESA_FORMAT_SIGNED_A8 ***/ -static void FETCH(signed_rg88)( const struct gl_texture_image *texImage, -GLint i, GLint j, GLint k, GLfloat *texel ) +static void FETCH(signed_a8)( const struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, GLfloat *texel ) +{ + const GLbyte s = *TEXEL_ADDR(GLbyte, texImage, i, j, k, 1); + texel[RCOMP] = 0.0F; + texel[GCOMP] = 0.0F; + texel[BCOMP] = 0.0F; + texel[ACOMP] = BYTE_TO_FLOAT_TEX( s ); +} + +#if DIM == 3 +static void store_texel_signed_a8(struct gl_texture_image *texImage, + GLint i, GLint j, GLint k, const void *texel) +{ + const GLbyte *rgba = (const GLbyte *) texel; + GLbyte *dst = TEXEL_ADDR(GLbyte, texImage, i, j, k, 1); + *dst = rgba[ACOMP]; +} +#endif + + +/* MESA_FORMAT_SIGNED_L8 **
Mesa (master): mesa: initial EXT_texture_snorm support
Module: Mesa Branch: master Commit: 0be369975fdfa79bcb702d0c13aa0a221055f61b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0be369975fdfa79bcb702d0c13aa0a221055f61b Author: Marek Olšák Date: Fri Mar 18 13:44:51 2011 +0100 mesa: initial EXT_texture_snorm support The component ordering of some formats has been been reversed to match Gallium types. --- src/mesa/main/extensions.c |3 +- src/mesa/main/fbobject.c | 38 - src/mesa/main/formats.c| 100 src/mesa/main/formats.h| 15 +- src/mesa/main/image.c | 28 +++- src/mesa/main/macros.h |3 +- src/mesa/main/mtypes.h |2 +- src/mesa/main/texformat.c | 49 ++--- src/mesa/main/teximage.c | 31 +- src/mesa/main/version.c|1 + 10 files changed, 233 insertions(+), 37 deletions(-) diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 7844b50..285e08d 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -203,6 +203,7 @@ static const struct extension extension_table[] = { { "GL_EXT_texture", o(EXT_texture), GL, 1996 }, { "GL_EXT_texture_rectangle", o(NV_texture_rectangle), GL, 2004 }, { "GL_EXT_texture_shared_exponent", o(EXT_texture_shared_exponent), GL, 2004 }, + { "GL_EXT_texture_snorm", o(EXT_texture_snorm), GL, 2009 }, { "GL_EXT_texture_sRGB",o(EXT_texture_sRGB), GL, 2004 }, { "GL_EXT_texture_sRGB_decode", o(EXT_texture_sRGB_decode), GL, 2006 }, { "GL_EXT_texture_swizzle", o(EXT_texture_swizzle), GL, 2008 }, @@ -274,7 +275,7 @@ static const struct extension extension_table[] = { { "GL_MESA_pack_invert",o(MESA_pack_invert), GL, 2002 }, { "GL_MESA_resize_buffers", o(MESA_resize_buffers), GL, 1999 }, { "GL_MESA_texture_array", o(MESA_texture_array), GL, 2007 }, - { "GL_MESA_texture_signed_rgba", o(MESA_texture_signed_rgba),GL, 2009 }, + { "GL_MESA_texture_signed_rgba",o(EXT_texture_snorm), GL, 2009 }, { "GL_MESA_window_pos", o(ARB_window_pos), GL, 2000 }, { "GL_MESAX_texture_float", o(ARB_texture_float), GL, 2009 }, { "GL_MESA_ycbcr_texture", o(MESA_ycbcr_texture), GL, 2002 }, diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index cc13103..4eab3e1 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -1081,7 +1081,6 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RGB10_A2: case GL_RGBA12: case GL_RGBA16: - case GL_RGBA16_SNORM: case GL_SRGB8_ALPHA8_EXT: return GL_RGBA; case GL_STENCIL_INDEX: @@ -1109,6 +1108,43 @@ _mesa_base_fbo_format(struct gl_context *ctx, GLenum internalFormat) case GL_RG8: case GL_RG16: return ctx->Extensions.ARB_texture_rg ? GL_RG : 0; + /* signed normalized texture formats */ + case GL_RED_SNORM: + case GL_R8_SNORM: + case GL_R16_SNORM: + return ctx->Extensions.EXT_texture_snorm ? GL_RED : 0; + case GL_RG_SNORM: + case GL_RG8_SNORM: + case GL_RG16_SNORM: + return ctx->Extensions.EXT_texture_snorm ? GL_RG : 0; + case GL_RGB_SNORM: + case GL_RGB8_SNORM: + case GL_RGB16_SNORM: + return ctx->Extensions.EXT_texture_snorm ? GL_RGB : 0; + case GL_RGBA_SNORM: + case GL_RGBA8_SNORM: + case GL_RGBA16_SNORM: + return ctx->Extensions.EXT_texture_snorm ? GL_RGBA : 0; + case GL_ALPHA_SNORM: + case GL_ALPHA8_SNORM: + case GL_ALPHA16_SNORM: + return ctx->Extensions.EXT_texture_snorm && + ctx->Extensions.ARB_framebuffer_object ? GL_ALPHA : 0; + case GL_LUMINANCE_SNORM: + case GL_LUMINANCE8_SNORM: + case GL_LUMINANCE16_SNORM: + return ctx->Extensions.EXT_texture_snorm && + ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE : 0; + case GL_LUMINANCE_ALPHA_SNORM: + case GL_LUMINANCE8_ALPHA8_SNORM: + case GL_LUMINANCE16_ALPHA16_SNORM: + return ctx->Extensions.EXT_texture_snorm && + ctx->Extensions.ARB_framebuffer_object ? GL_LUMINANCE_ALPHA : 0; + case GL_INTENSITY_SNORM: + case GL_INTENSITY8_SNORM: + case GL_INTENSITY16_SNORM: + return ctx->Extensions.EXT_texture_snor
Mesa (master): gallium: implement clamping controls (ARB_color_buffer_float )
Module: Mesa Branch: master Commit: 47e3896dfd89a26abbe4ca2469c2480f3982b204 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=47e3896dfd89a26abbe4ca2469c2480f3982b204 Author: Luca Barbieri Date: Wed Feb 16 00:14:49 2011 +0100 gallium: implement clamping controls (ARB_color_buffer_float) BTW this changes the gallium interface. Some rather cosmetic changes by Marek. Squashed commit of the following: commit 513b37d484f0318311e84bb86ed4c93cdff71f13 Author: Luca Barbieri Date: Thu Aug 26 18:17:54 2010 +0200 mesa/st: respect fragment clamping in st_DrawPixels commit 546a31e42cad459d7a7a10ebf77fc5ffcf89e9b8 Author: Luca Barbieri Date: Thu Aug 26 18:17:28 2010 +0200 mesa/st: support fragment and vertex color clamping commit c406514a1fbee6891da4cf9ac3eebe4e4407ec13 Author: Luca Barbieri Date: Tue Aug 24 21:56:37 2010 +0200 mesa/st: expose ARB_color_buffer_float if unclamping is supported commit d0c5ea11b6f75f3da2f4ca989115f150ebc7cf8d Author: Luca Barbieri Date: Thu Aug 26 17:53:41 2010 +0200 mesa/st: use unclamped colors This assumes that Gallium is to be interpreted as given drivers the responsibility to clamp these colors if necessary. commit aef5c3c6be6edd076e955e37c80905bc447f8a82 Author: Luca Barbieri Date: Thu Aug 26 18:12:34 2010 +0200 mesa, mesa/st: handle read color clamping properly We set IMAGE_CLAMP_BIT in the caller based on _ClampReadColor, where the operation mandates it. (see the removed XXX comment. -Marek) TODO: did I get the set of operations mandating it right? commit 76bdfcfe3ff4145a1818e6cb6e227b730a5f12d8 Author: Luca Barbieri Date: Thu Aug 26 18:18:25 2010 +0200 gallium: add color clamping to the interface --- src/gallium/docs/source/cso/rasterizer.rst | 24 src/gallium/include/pipe/p_defines.h|2 ++ src/gallium/include/pipe/p_state.h |2 ++ src/mesa/state_tracker/st_atom_blend.c |2 +- src/mesa/state_tracker/st_atom_depth.c |2 +- src/mesa/state_tracker/st_atom_rasterizer.c |8 +++- src/mesa/state_tracker/st_cb_clear.c|4 ++-- src/mesa/state_tracker/st_cb_drawpixels.c |1 + src/mesa/state_tracker/st_cb_readpixels.c |7 +-- src/mesa/state_tracker/st_extensions.c |7 +++ 10 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/gallium/docs/source/cso/rasterizer.rst b/src/gallium/docs/source/cso/rasterizer.rst index d547055..e10c16e 100644 --- a/src/gallium/docs/source/cso/rasterizer.rst +++ b/src/gallium/docs/source/cso/rasterizer.rst @@ -7,6 +7,30 @@ The rasterizer state controls the rendering of points, lines and triangles. Attributes include polygon culling state, line width, line stipple, multisample state, scissoring and flat/smooth shading. +Linkage + +clamp_vertex_color +^^ + +If set, TGSI_SEMANTIC_COLOR registers are clamped to the [0, 1] range after +the execution of the vertex shader, before being passed to the geometry +shader or fragment shader. + +OpenGL: glClampColor(GL_CLAMP_VERTEX_COLOR) in GL 3.0 or GL_ARB_color_buffer_float + +D3D11: seems always disabled + +clamp_fragment_color + + +Controls whether TGSI_SEMANTIC_COLOR outputs of the fragment shader +are clamped to [0, 1]. + +OpenGL: glClampColor(GL_CLAMP_FRAGMENT_COLOR) in GL 3.0 or ARB_color_buffer_float + +D3D11: seems always disabled + + Shading --- diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index bac3300..4f6daa8 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -463,6 +463,8 @@ enum pipe_cap { PIPE_CAP_SHADER_STENCIL_EXPORT, PIPE_CAP_TGSI_INSTANCEID, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR, + PIPE_CAP_VERTEX_COLOR_CLAMP_CONTROL, + PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL }; /* Shader caps not specific to any single stage */ diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index cf6c5b5..f6ad456 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -81,6 +81,8 @@ struct pipe_rasterizer_state { unsigned flatshade:1; unsigned light_twoside:1; + unsigned clamp_vertex_color:1; + unsigned clamp_fragment_color:1; unsigned front_ccw:1; unsigned cull_face:2; /**< PIPE_FACE_x */ unsigned fill_front:2; /**< PIPE_POLYGON_MODE_x */ diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index fb1c7a4..d1844e1 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -286,7 +286,7 @@ update_blend( struct st_context *st ) { struct pipe_blend_color bc; - COPY_4FV(bc.color, st->ctx->Color.BlendColor); + COPY_4FV(bc.color, st->ctx->Color.BlendColorUnclamped); cso_set_blend_color(st->cso_context, &bc); } } diff --git a/src/mesa/stat
Mesa (master): mesa: regenerate glapi files
Module: Mesa Branch: master Commit: 3bdd12ecb57e9cdc2b21cd665fab14698c1c07df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3bdd12ecb57e9cdc2b21cd665fab14698c1c07df Author: Marek Olšák Date: Wed Feb 16 00:02:15 2011 +0100 mesa: regenerate glapi files --- src/glx/indirect.c | 15 + src/glx/indirect.h |1 + src/glx/indirect_init.c |4 + src/mapi/glapi/glapi_mapi_tmp.h | 1645 +- src/mapi/glapi/glapi_sparc.S| 603 ++-- src/mapi/glapi/glapi_x86-64.S | 2897 src/mapi/glapi/glapi_x86.S | 959 +++--- src/mapi/glapi/glapitable.h | 641 ++-- src/mapi/glapi/glapitemp.h | 180 +- src/mapi/glapi/glprocs.h| 1438 src/mesa/main/enums.c | 7171 --- src/mesa/main/glapidispatch.h | 1290 src/mesa/main/remap_helper.h| 518 ++-- 13 files changed, 8736 insertions(+), 8626 deletions(-) Diff: http://cgit.freedesktop.org/mesa/mesa/diff/?id=3bdd12ecb57e9cdc2b21cd665fab14698c1c07df ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit