[Mesa-dev] [PATCH] i965/ps: Use SET_FIELD() for sampler count

2015-04-29 Thread Topi Pohjolainen
The value is actually clamped to 0-16 as sample state pointer can be used to support more than 16 samplers. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_defines.h | 1 + src/mesa/drivers/dri/i965/gen7_wm_state.c | 5 +++-- src/mesa/drivers/dri/i965/gen8_ps_state.c | 5

[Mesa-dev] [PATCH 13/14] i965/blorp/gen6: Prepare vertex buffer setup logic for gen8

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 30 ++ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.cpp b/src/mesa/drivers/dri/i965/gen6_blorp.cpp index f45dcd4..22ea86c 100644

[Mesa-dev] [PATCH 03/14] meta: Provide read access to blit shaders

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/common/meta.c | 17 - src/mesa/drivers/common/meta.h | 5 - 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index cf99d95..8c69b5d 100644

[Mesa-dev] [PATCH 02/14] i965/blorp/gen6: Support for loading glsl-based fragment shaders

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 1 + src/mesa/drivers/dri/i965/gen6_blorp.cpp | 74 2 files changed, 75 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h

[Mesa-dev] [PATCH 10/14] i965/blorp: Enable glsl-based fbo blits

2015-04-23 Thread Topi Pohjolainen
20.87 12011.815 762.67232 + 137 13963.49 18281.85 17031.56 16985.443 712.08714 Difference at 95.0% confidence 4973.63 +/- 174.726 41.4061% +/- 1.45462% No visible changes in public benchmarks. No piglit regressions. Signed-off-by: Topi Pohjolainen --- src/mesa/driver

[Mesa-dev] [PATCH 09/14] i965/gen6: Add support for setting minimum layer for tex surfaces

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 5 - 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index ad5ddb5..c006762 100644 --- a

[Mesa-dev] [PATCH 08/14] i965/blorp: Add support for setting samplers for glsl-based blits

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 2 ++ src/mesa/drivers/dri/i965/gen6_blorp.cpp | 30 ++ 2 files changed, 32 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h index

[Mesa-dev] [PATCH 04/14] i965/meta: Add helper for looking up blit programs

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_meta_util.c | 148 ++ src/mesa/drivers/dri/i965/brw_meta_util.h | 9 ++ 2 files changed, 157 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_meta_util.c b/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 05/14] i965/blorp: Add plumbing for glsl-based color blits

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 27 + src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 90 2 files changed, 117 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 01/14] i965/blorp/gen7: Support for loading glsl-based fragment shaders

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 15 + src/mesa/drivers/dri/i965/brw_blorp.h| 41 src/mesa/drivers/dri/i965/gen6_blorp.cpp | 22 + src/mesa/drivers/dri/i965/gen7_blorp.cpp | 54

[Mesa-dev] [PATCH 06/14] i965/blorp: Add support for loading vertices for glsl-based blits

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 5 ++ src/mesa/drivers/dri/i965/gen6_blorp.cpp | 94 2 files changed, 99 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri/i965/brw_blorp.h

[Mesa-dev] [PATCH 11/14] i965/blorp/gen7: Prepare re-using for gen8

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.cpp b/src/mesa/drivers/dri/i965/gen7_blorp.cpp index 7ee62f7..d41d592 100644 --- a/src/mesa/drivers/dri

[Mesa-dev] [PATCH 12/14] i965/blorp/gen7: Expose state setup applicable to gen8

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 36 src/mesa/drivers/dri/i965/gen7_blorp.cpp | 20 +- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa

[Mesa-dev] [PATCH 14/14] i965/blorp/gen8: Execution support

2015-04-23 Thread Topi Pohjolainen
-based programs using the gen-aware jump tables that the core i965 batch submission mechanism provides. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/Makefile.sources | 1 + src/mesa/drivers/dri/i965/brw_blorp.cpp| 6 +- src/mesa/drivers/dri/i965/brw_blorp.h | 12 + sr

[Mesa-dev] i965: Don't use gl-context for fbo-blits

2015-04-23 Thread Topi Pohjolainen
skip vertex shader, clip and viewport transformation in strips&fans (SF) but to provide the vertices directly from vertex fetcher (VF) to the windower (WM). Topi Pohjolainen (14): i965/blorp/gen7: Support for loading glsl-based fragment shaders i965/blorp/gen6: Support for loading glsl-b

[Mesa-dev] [PATCH 07/14] i965/blorp: Add support for setting up surfaces for glsl-based blits

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 3 +++ src/mesa/drivers/dri/i965/gen6_blorp.cpp | 30 ++ src/mesa/drivers/dri/i965/gen7_blorp.cpp | 7 +++ 3 files changed, 40 insertions(+) diff --git a/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 0.5/18] i965/gen8: Use constant pointers for reading miptree details

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen8_surface_state.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c index 011c685..b9bbb73 100644 --- a/src/mesa

[Mesa-dev] [PATCH 13/16] i965/blorp/gen6: Move surface setup for the parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 5 src/mesa/drivers/dri/i965/gen6_blorp.cpp | 50 ++-- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri

[Mesa-dev] [PATCH 07/16] i965/blorp: Allow blend state to be set for multiple render targets

2015-04-23 Thread Topi Pohjolainen
Original blorp writes only one buffer per shader invocation. Once the launch mechanism is shared with glsl-based programs there will be need for supporting multiple render targets. Also drop the always constant color write disable settings. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers

[Mesa-dev] [PATCH 02/16] i965/blorp: Refactor vertex buffer state setup

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 60 ++-- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.cpp b/src/mesa/drivers/dri/i965/gen6_blorp.cpp index e45705a..6c139ec 100644

[Mesa-dev] [PATCH 08/16] i965/blorp: Add support for layered rendering

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 6 -- src/mesa/drivers/dri/i965/brw_blorp.h| 4 +++- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 2 +- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff

[Mesa-dev] [PATCH 03/16] i965/blorp: Allow caller to provide sampler settings

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 4 +++- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 15 +-- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 3 ++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 09/16] i965/blorp: Prepare drawing rectangle for flipped coordinates

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen6_blorp.cpp b/src/mesa/drivers/dri/i965/gen6_blorp.cpp index 4f4d752..21c8423 100644 --- a/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 12/16] i965/blorp: Move sampler setup for the parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Also move the gen >= 7 specific logic into gen6_blorp.ccp, this will help to avoid more duplication when corresponding logic for glsl-based programs is added. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 9 +++--- src/mesa/drivers/dri/i965/gen6_blorp.cpp |

[Mesa-dev] [PATCH 14/16] i965/blorp/gen7: Move surface setup for the parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 3 ++ src/mesa/drivers/dri/i965/gen7_blorp.cpp | 55 ++-- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp.h b/src/mesa/drivers/dri

[Mesa-dev] [PATCH 01/16] i965/blorp: Remove constant parameter

2015-04-23 Thread Topi Pohjolainen
This was still needed when we had support for blorp clears but now this is fixed to nop. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 1 - src/mesa/drivers/dri/i965/brw_blorp.h| 8 src/mesa/drivers/dri/i965/gen7_blorp.cpp | 11 --- 3

[Mesa-dev] [PATCH 11/16] i965/blorp: Move push const setup for the parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 2 +- src/mesa/drivers/dri/i965/brw_blorp.h| 7 ++- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 22 +++--- src/mesa/drivers/dri/i965/gen6_blorp.h | 2 +- src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 04/16] i965/gen7/blorp: Remove unused arguments

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 75 1 file changed, 28 insertions(+), 47 deletions(-) diff --git a/src/mesa/drivers/dri/i965/gen7_blorp.cpp b/src/mesa/drivers/dri/i965/gen7_blorp.cpp index d841346..c9e7cb7 100644

[Mesa-dev] [PATCH 16/16] i965/blorp: Move multisample setup for parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 2 ++ src/mesa/drivers/dri/i965/gen6_blorp.cpp | 14 ++ src/mesa/drivers/dri/i965/gen7_blorp.cpp | 5 + 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 15/16] i965/blorp: Move vertex uploading for parameter type to handle

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 6 ++ src/mesa/drivers/dri/i965/gen6_blorp.cpp | 11 +-- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 05/16] i965/blorp: Remove unused arguments

2015-04-23 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.h| 7 ++- src/mesa/drivers/dri/i965/gen6_blorp.cpp | 20 +++- src/mesa/drivers/dri/i965/gen7_blorp.cpp | 6 +++--- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/mesa/drivers

[Mesa-dev] [PATCH 10/16] i965/blorp: Use virtual function for wm/ps configuration

2015-04-23 Thread Topi Pohjolainen
submission (gen6/7_blorp_exec()). This will be exploited even further in the subsequent patches when one more program type is added - the one representing programs compiled from real glsl-sources. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 7 --- src/mesa

[Mesa-dev] [PATCH 06/16] i965/blorp: Prepare for attributes other than render position

2015-04-23 Thread Topi Pohjolainen
setup always uses BRW_SF_URB_ENTRY_READ_OFFSET even when there are no additional attributes. Hence the change makes the two (blorp and regular) consistent. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_blorp.cpp | 5 +++-- src/mesa/drivers/dri/i965/brw_blorp.h| 3 ++- src

[Mesa-dev] i965: Blorp state setup refactors

2015-04-23 Thread Topi Pohjolainen
This series introduces virtual member functions for blorp parameters that know how certain part of the batch is to be programmed for the shader in question. This will be taken advantage of later on when I add support for launching glsl-based programs. Topi Pohjolainen (16): i965/blorp: Remove

[Mesa-dev] [PATCH 16/18] i965/ps/gen7: Refactor state uploading

2015-04-22 Thread Topi Pohjolainen
Now the uploading depends only on the input parameters instead of consulting the current gl-state. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 9 + src/mesa/drivers/dri/i965/gen7_wm_state.c | 58 --- 2 files changed, 46

[Mesa-dev] [PATCH 15/18] i965/wm/gen6: Refactor push constant state uploading

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 5 src/mesa/drivers/dri/i965/gen6_wm_state.c | 50 ++- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri

[Mesa-dev] [PATCH 13/18] i965: Pass slice details as parameters for surface setup

2015-04-22 Thread Topi Pohjolainen
Also changed a couple of direct shifts into SET_FIELD(). Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 3 ++- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 30 +-- src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 14

[Mesa-dev] [PATCH 02/18] i965: Expose and refactor brw_update_renderbuffer_surfaces()

2015-04-22 Thread Topi Pohjolainen
Note that brw_update_renderbuffer_surfaces() already had a helper variable which was used in parallel to direct access of the current draw buffer of the context. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h| 5 +++ src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 12/18] i965: Pass texture target as parameter for surface setup

2015-04-22 Thread Topi Pohjolainen
Also changed a couple of direct shifts into SET_FIELD(). Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 2 +- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 12 +++- src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 11 +-- src

[Mesa-dev] [PATCH 09/18] i965: Move texture swizzle resolving into dispatcher

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 4 ++-- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 20 +++- src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 17 ++--- src/mesa/drivers/dri/i965/gen8_surface_state.c

[Mesa-dev] [PATCH 11/18] i965: Refactor effective depth calculation

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 4 ++-- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 11 +-- src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 7 +-- src/mesa/drivers/dri/i965/gen8_surface_state.c| 8 +--- 4

[Mesa-dev] [PATCH 17/18] i965/ps/gen8: Refactor state uploading

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 12 + src/mesa/drivers/dri/i965/gen8_ps_state.c | 74 --- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri

[Mesa-dev] [PATCH 14/18] i965/wm/gen6: Refactor program offset setup

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 8 + src/mesa/drivers/dri/i965/gen6_wm_state.c | 56 ++- 2 files changed, 41 insertions(+), 23 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri

[Mesa-dev] [PATCH 18/18] i965/gen8: Expose state base address setup

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_state.h | 3 +++ src/mesa/drivers/dri/i965/gen8_misc_state.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h index

[Mesa-dev] [PATCH 05/18] i965: Refactor sampler state setup

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_sampler_state.c | 60 +-- src/mesa/drivers/dri/i965/brw_state.h | 9 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c b/src/mesa

[Mesa-dev] i965: Batch emission refactoring

2015-04-22 Thread Topi Pohjolainen
with formatting. Topi Pohjolainen (18): i965: Refactor rb surface setup to allow caller to store offsets i965: Expose and refactor brw_update_renderbuffer_surfaces() i965: Refactor and expose brw_upload_binding_table() i965: Remove dependency to tex object in default color setup i965: Ref

[Mesa-dev] [PATCH 06/18] i965: Move texture buffer dispatch into single location

2015-04-22 Thread Topi Pohjolainen
All generations do the same exacr dispatch and it could be therefore done in the hardware independent stage. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 3 --- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 32 +++ src/mesa

[Mesa-dev] [PATCH 07/18] i965/gen8: Use miptree format in the surface setup

2015-04-22 Thread Topi Pohjolainen
No functional change but this allows to drop the texture object's mesa format in later patches. Stencil buffer has fixed hardware format corresponding to fixed mesa format. (This is in fact already specfically tested in intel_fbo.c::intel_validate_framebuffer()). Signed-off-by: Topi Pohjol

[Mesa-dev] [PATCH 03/18] i965: Refactor and expose brw_upload_binding_table()

2015-04-22 Thread Topi Pohjolainen
Read and write parts of the state stage are also split into explicit arguments allowing future patches to use constant program data. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_binding_tables.c | 21 ++--- src/mesa/drivers/dri/i965/brw_state.h | 7

[Mesa-dev] [PATCH 10/18] i965: Pass integer format flag as parameter to surface setup

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 4 +++- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 7 +-- src/mesa/drivers/dri/i965/gen7_wm_surface_state.c | 6 +++--- src/mesa/drivers/dri/i965/gen8_surface_state.c| 5 +++-- 4 files

[Mesa-dev] [PATCH 04/18] i965: Remove dependency to tex object in default color setup

2015-04-22 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_sampler_state.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_sampler_state.c b/src/mesa/drivers/dri/i965/brw_sampler_state.c index c4bd949..c78e2e3

[Mesa-dev] [PATCH 08/18] i965: Move tex miptree and format resolving into dispatcher

2015-04-22 Thread Topi Pohjolainen
All hardware platforms have this in common, so do it in the hardware independent dispatcher. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 4 ++- src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 30 --- src/mesa/drivers/dri/i965

[Mesa-dev] [PATCH 01/18] i965: Refactor rb surface setup to allow caller to store offsets

2015-04-22 Thread Topi Pohjolainen
Notice that in gen7_wm_surface_state.c there is also indentation change in the surrounding code removing tabs. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_context.h | 8 +++ src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 28 --- src

[Mesa-dev] [PATCH] i965/meta/hack: Prepare stencil blit for ARB_texture_stencil8

2015-04-06 Thread Topi Pohjolainen
This allows _mesa_base_tex_format() to be fixed to use correct extension when choosing format for stencil, ARB_texture_stencil8 and not ARB_stencil_texturing. No piglit regressions on BDW. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c | 4 src/mesa

[Mesa-dev] [RFC] i965: Factor out descriptor building for indirect send messages

2015-03-07 Thread Topi Pohjolainen
c and wanted to try to something else. I believe patch number five should go nicely on top of this as the descriptor instruction could be followed by (or preceeeded by) any additional instructions modifying the descriptor register before the actual send instruction. Signed-off-by: Topi Pohjol

[Mesa-dev] [PATCH 14/17] glsl: Support double inouts (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/ir_set_program_inouts.cpp | 24 +--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp index 97ead75..4aa402e 100644 --- a/src/glsl

[Mesa-dev] [PATCH 13/17] glsl/lexer: Support double floats (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/glsl_lexer.ll | 42 ++ 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/glsl/glsl_lexer.ll b/src/glsl/glsl_lexer.ll index 57c46be..de58e73 100644 --- a/src/glsl/glsl_lexer.ll +++

[Mesa-dev] [PATCH 15/17] glsl: Support double loop control (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/loop_controls.cpp | 19 +++ 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/glsl/loop_controls.cpp b/src/glsl/loop_controls.cpp index 1c1d34f..9a99c21 100644 --- a/src/glsl/loop_controls.cpp +++ b/src/g

[Mesa-dev] [PATCH 17/17] glsl: add double support

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie This adds the guts of the fp64 implementation to the GLSL compiler. - builtin double types - double constant support - lexer parsing for double types (lf, LF) - enforcing flat on double fs inputs - double operations (d2f,f2d, pack/unpack, frexp - in 2 parts) - ir builder bits.

[Mesa-dev] [PATCH 11/17] glsl/ast: Support double floats (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/ast.h | 2 ++ src/glsl/ast_function.cpp | 67 + src/glsl/ast_to_hir.cpp | 38 +-- src/glsl/glsl_parser_extras.cpp | 4 +++ 4 files changed, 96 i

[Mesa-dev] [PATCH 12/17] glsl/parser: Support double floats (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/glsl_parser.yy | 33 + 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy index 7fb8c38..596e432 100644 --- a/src/glsl/glsl_parser.yy +++ b/src

[Mesa-dev] [PATCH 16/17] glsl: Linking support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/link_uniform_initializers.cpp | 7 ++- src/glsl/link_varyings.cpp | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/glsl/link_uniform_initializers.cpp b/src/glsl/link_uniform_initializers.cpp in

[Mesa-dev] [PATCH 09/17] glsl: Add support doubles in optimization passes (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/opt_constant_propagation.cpp | 3 +++ src/glsl/opt_minmax.cpp | 13 + 2 files changed, 16 insertions(+) diff --git a/src/glsl/opt_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp index c334e12

[Mesa-dev] [PATCH 01/17] glsl: Add double builtin type (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/builtin_type_macros.h | 16 ++ src/glsl/glsl_parser_extras.h | 5 ++ src/glsl/glsl_types.cpp| 109 + src/glsl/glsl_types.h | 18 ++- 4 files changed, 125 insertions(+)

[Mesa-dev] [PATCH 10/17] glsl: Add ubo lowering support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/lower_ubo_reference.cpp | 13 ++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/glsl/lower_ubo_reference.cpp b/src/glsl/lower_ubo_reference.cpp index 43dd067..e539491 100644 --- a/src/glsl/lower_ubo_referen

[Mesa-dev] [PATCH 03/17] glsl: Uniform linking support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/link_uniforms.cpp | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp index de2f6c9..0db70d5 100644 --- a/src/glsl/link_uniforms.cpp +++ b/src/glsl/link_unifo

[Mesa-dev] [PATCH 06/17] glsl/ir: Add cloning support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/ir_clone.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp index dffa578..5c7279c 100644 --- a/src/glsl/ir_clone.cpp +++ b/src/glsl/ir_clone.cpp @@ -327,6 +327,7 @@ ir_constant::clone(v

[Mesa-dev] [PATCH 07/17] glsl/ir: Add builtin constant function support for doubles

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie (was: add double support) Signed-off-by: Dave Airlie --- src/glsl/ir_constant_expression.cpp | 234 +++- 1 file changed, 202 insertions(+), 32 deletions(-) diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp

[Mesa-dev] Split version of 07/13 glsl: add double support

2015-02-05 Thread Topi Pohjolainen
I wanted to try if this could be split into smaller chunks to aid review. Only compile tested (each step compiles). Dave Airlie (17): glsl: Add double builtin type (was: add double support) glsl: Add double builtin type generation (was: add double support) glsl: Uniform linking support for d

[Mesa-dev] [PATCH 05/17] glsl/ir: Add printing support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/ir_print_visitor.cpp | 11 +++ 1 file changed, 11 insertions(+) diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp index bd39805..3600827 100644 --- a/src/glsl/ir_print_visitor.cpp +++ b/src/glsl/ir_print

[Mesa-dev] [PATCH 08/17] glsl/ir: Add builder support for functions with double floats

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie (was: add double support) Signed-off-by: Dave Airlie --- src/glsl/ir_builder.cpp | 23 +++ src/glsl/ir_builder.h | 5 + 2 files changed, 28 insertions(+) diff --git a/src/glsl/ir_builder.cpp b/src/glsl/ir_builder.cpp index a2f6f29..37bbffa 100644 -

[Mesa-dev] [PATCH 04/17] glsl/ir: Add builtin function support for doubles (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Signed-off-by: Dave Airlie --- src/glsl/ir.cpp | 104 ++-- src/glsl/ir.h | 21 src/glsl/ir_validate.cpp| 61 --- src/mesa/program/ir_to_mesa.cpp | 10 4 files cha

[Mesa-dev] [PATCH 02/17] glsl: Add double builtin type generation (was: add double support)

2015-02-05 Thread Topi Pohjolainen
From: Dave Airlie Perhaps squash this with previous. Signed-off-by: Dave Airlie --- src/glsl/builtin_types.cpp | 30 ++ 1 file changed, 30 insertions(+) diff --git a/src/glsl/builtin_types.cpp b/src/glsl/builtin_types.cpp index 10fac0f..fef86df 100644 --- a/src/gls

[Mesa-dev] [PATCH 1/5] meta/blit: Add plumbing for shaders without depth

2015-01-29 Thread Topi Pohjolainen
Currently all blit programs are unconditionally compiled with gl_FragDepth. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/common/meta.c | 3 ++- src/mesa/drivers/common/meta.h | 1 + src/mesa/drivers/common/meta_blit.c| 2 +- src/mesa/drivers

[Mesa-dev] [PATCH 2/5] meta/blit: Write depth only when asked for

2015-01-29 Thread Topi Pohjolainen
g6<8,8,1>F sampler (1, 0, 0, 1) mlen 2 rlen 4{ align1 1Q }; sendc(8) nullg124<8,8,1>F render RT write SIMD8 LastRT Surface = 0 mlen 4 rlen 0 { align1 1Q EOT }; Signed-off-by: Topi Pohjolainen CC: Kenneth Graunke --- src/mesa/drivers/common/meta.c | 7 --

[Mesa-dev] [PATCH 5/5] meta: Don't write depth when decompressing tex-images

2015-01-29 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/common/meta.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 45035b1..6ddec73 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common

[Mesa-dev] [PATCH 4/5] meta: Don't write depth when generating miptrees

2015-01-29 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/common/meta_generate_mipmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/common/meta_generate_mipmap.c b/src/mesa/drivers/common/meta_generate_mipmap.c index c38b46b..c1b6d3c 100644 --- a/src/mesa

[Mesa-dev] meta/blit: Write gl_FragDepth only when really needed

2015-01-29 Thread Topi Pohjolainen
in the shader. While this didn't improve any performance benches I tried, it doesn't seem to introduce any regressions either in the benches or with piglit. Topi Pohjolainen (5): meta/blit: Add plumbing for shaders without depth meta/blit: Write depth only when asked for meta/bli

[Mesa-dev] [PATCH 3/5] meta/blit: Compile programs with and without depth

2015-01-29 Thread Topi Pohjolainen
or improvements. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/common/meta.h | 3 ++- src/mesa/drivers/common/meta_blit.c | 13 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h index de3dc6a

[Mesa-dev] [WIP 23/25] i965/fs: Lower double precision scalars into vectors

2014-10-24 Thread Topi Pohjolainen
On gen7 the hardware supports only single precision scalar operands. This patch modifies fs_visitor to allocate temporary general registers and to manually copy the original 64-bits into the temporary 8- or 16-wide vector depending on the execution size. Signed-off-by: Topi Pohjolainen --- src

[Mesa-dev] [WIP 14/25] i965/fs: Add support for ir_unop_pack_double_2x32

2014-10-24 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.h | 2 ++ .../drivers/dri/i965/brw_fs_channel_expressions.cpp | 3 +++ src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 20 3 files changed, 25 insertions(+) diff --git a/src

[Mesa-dev] [WIP 18/25] i965/fs: Generate two instructions for double precision comparison

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_eu_emit.c| 6 ++ src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 7 --- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 21/25] i965/fs/gen7: Add generator support for loading double precision uniforms

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_defines.h| 1 + src/mesa/drivers/dri/i965/brw_fs.h | 3 +++ src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 32 ++ 3 files changed, 36 insertions(+) diff --git a/src/mesa/drivers/dri

[Mesa-dev] [WIP 24/25] i965/fs: Add unpack_double_2x32 virtual opcode

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_defines.h| 2 + src/mesa/drivers/dri/i965/brw_fs.h | 5 +++ src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 52 ++ 3 files changed, 59 insertions(+) diff --git a/src/mesa/drivers/dri

[Mesa-dev] [WIP 22/25] i965: Add helper telling if uniform is double and requires special load

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_shader.cpp | 36 src/mesa/drivers/dri/i965/brw_shader.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 25/25] i965/fs: Add support for ir_unop_unpack_double_2x32

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp | 2 ++ src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 8 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp b

[Mesa-dev] [WIP 11/25] i965/fs: Prepare register allocator for double precision floats

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.h| 1 + src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 29 +++ 2 files changed, 30 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h

[Mesa-dev] [WIP 19/25] i965/fs: Collect results for double precision conditionals

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.cpp | 43 src/mesa/drivers/dri/i965/brw_fs.h | 3 +++ 2 files changed, 46 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index

[Mesa-dev] [WIP 20/25] i965/gen7: Add support for loading double float scalars in 16-width

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_eu.h | 4 src/mesa/drivers/dri/i965/brw_eu_emit.c | 24 2 files changed, 28 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_eu.h b/src/mesa/drivers/dri/i965/brw_eu.h index 22d5a0a

[Mesa-dev] [WIP 13/25] i965/fs: Add pack_double_2x32 virtual opcode

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_defines.h| 1 + src/mesa/drivers/dri/i965/brw_fs.h | 5 ++ src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 96 ++ 3 files changed, 102 insertions(+) diff --git a/src/mesa/drivers/dri

[Mesa-dev] [WIP 09/25] i965/fs: Generator support for converting double to float

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_defines.h| 2 ++ src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 45 ++ 2 files changed, 47 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 15/25] i965/gen8: Add support for double precision constant operands

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen Signed-off-by: Tapani P\344lli Signed-off-by: Abdiel Janulgue --- src/mesa/drivers/dri/i965/brw_fs.cpp | 8 src/mesa/drivers/dri/i965/brw_fs.h | 1 + src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 3 +++ src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 07/25] i965/fs: Prepare live interval analysis for double precision

2014-10-16 Thread Topi Pohjolainen
TODO: Prevent double precision being split between push and pull. Perhaps it would be easiest just to force them into pull. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.cpp | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers

[Mesa-dev] [WIP 16/25] i965/gen7: Add support for double precision constant operands

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 5 + 1 file changed, 5 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index c352631..fa3fc41 100644 --- a/src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 17/25] i965/fs: Make generator to emit two instructions for double floats

2014-10-16 Thread Topi Pohjolainen
TODO: 3-src operations Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_eu_emit.c | 39 + 1 file changed, 39 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index 92f19e2..a5e3475

[Mesa-dev] [WIP 12/25] i965: Add helper telling if a register is scalar

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_reg.h | 8 1 file changed, 8 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_reg.h b/src/mesa/drivers/dri/i965/brw_reg.h index cf2ef13..7cf748f 100644 --- a/src/mesa/drivers/dri/i965/brw_reg.h +++ b/src/mesa

[Mesa-dev] [WIP 10/25] i965/fs: Double precision to single conversion support

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs_channel_expressions.cpp | 2 +- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 13 - 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/i965

[Mesa-dev] [WIP 06/25] i965/fs: Take double float into account in register offsets

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.h | 4 +++- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 8 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index

[Mesa-dev] [WIP 04/25] i965: Tell backend register about double precision type

2014-10-16 Thread Topi Pohjolainen
Signed-off-by: Topi Pohjolainen Signed-off-by: Tapani P\344lli Signed-off-by: Abdiel Janulgue --- src/mesa/drivers/dri/i965/brw_shader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp

[Mesa-dev] [WIP 08/25] i965/fs: Add support for double precision uniform loading

2014-10-16 Thread Topi Pohjolainen
Unfortunately the safety assertion needs to be dropped as the amount occupied by different types of uniforms is not the same anymore. Signed-off-by: Topi Pohjolainen --- src/mesa/drivers/dri/i965/brw_fs.cpp | 16 +--- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src

<    3   4   5   6   7   8   9   10   11   12   >