Re: [Mesa-dev] [PATCH 2/2] r300g: small code cleanup

2015-02-06 Thread David Heidelberg
Should I incorporate PIPE_SHADER_CAP_MAX_PREDS change in this patch or 
send another with idea of dropping PIPE_SHADER_CAP_MAX_PREDS completly 
from gallium, if there is no use?


David

On 02/06/2015 04:41 PM, Marek Olšák wrote:

This looks good with one exception: MAX_PREDS should be 0 for all
shader stages. It has never been supported and never will be. With
that done, this patch is:

Reviewed-by: Marek Olšák marek.ol...@amd.com

Marek

On Thu, Feb 5, 2015 at 11:56 PM, David Heidelberg da...@ixit.cz wrote:

Signed-off-by: David Heidelberg da...@ixit.cz
---
  src/gallium/drivers/r300/r300_reg.h| 22 ++
  src/gallium/drivers/r300/r300_screen.c |  4 +---
  src/gallium/drivers/r300/r300_state.c  |  1 -
  3 files changed, 3 insertions(+), 24 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_reg.h 
b/src/gallium/drivers/r300/r300_reg.h
index 46aeba0..8a0728d 100644
--- a/src/gallium/drivers/r300/r300_reg.h
+++ b/src/gallium/drivers/r300/r300_reg.h
@@ -191,7 +191,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  #  define R300_VAP_TCL_BYPASS  (1  8)
  /* Read only flag if TCL engine is busy. */
  #  define R300_VAP_PVS_BUSY(1  11)
-/* TODO: gap for MAX_MPS */
  /* Read only flag if the vertex store is busy. */
  #  define R300_VAP_VS_BUSY (1  24)
  /* Read only flag if the reciprocal engine is busy. */
@@ -921,9 +920,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
   *
   * The line width is given in multiples of 6.
   * In default mode lines are classified as vertical lines.
- * HO: horizontal
- * VE: vertical or horizontal
- * HO  VE: no classification
   */
  #define R300_GA_LINE_CNTL 0x4234
  #   define R300_GA_LINE_CNTL_WIDTH_SHIFT   0
@@ -934,12 +930,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  #  define R300_GA_LINE_CNTL_END_TYPE_COMP (3  16) /* Computed 
(perpendicular to slope) */
  #  define R500_GA_LINE_CNTL_SORT_NO   (0  18)
  #  define R500_GA_LINE_CNTL_SORT_MINX_MINY(1  18)
-/** TODO: looks wrong */
-#   define R300_LINESIZE_MAX  (R300_GA_LINE_CNTL_WIDTH_MASK / 
6)
-/** TODO: looks wrong */
-#   define R300_LINE_CNT_HO   (1  16)
-/** TODO: looks wrong */
-#   define R300_LINE_CNT_VE   (1  17)

  /* Line Stipple configuration information. */
  #define R300_GA_LINE_STIPPLE_CONFIG   0x4238
@@ -1278,8 +1268,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  #define R300_RS_IP_1   0x4314
  #define R300_RS_IP_2   0x4318
  #define R300_RS_IP_3   0x431C
-#   define R300_RS_INTERP_SRC_SHIFT  2 /* TODO: check for removal 
*/
-#   define R300_RS_INTERP_SRC_MASK   (7  2) /* TODO: check for 
removal */
  #  define R300_RS_TEX_PTR(x)   (x  0)
  #  define R300_RS_COL_PTR(x)   ((x)  6)
  #  define R300_RS_COL_FMT(x)   ((x)  9)
@@ -3300,7 +3288,7 @@ enum {
  #   define R500_INST_ALPHA_PRED_SEL_   (3  25)
  #   define R500_INST_ALPHA_PRED_SEL_   (4  25)
  #   define R500_INST_ALPHA_PRED_SEL_   (5  25)
-/* XXX next four are kind of guessed */
+/* Next four are guessed, documentation doesn't mention order. */
  #   define R500_INST_STAT_WE_R (1  28)
  #   define R500_INST_STAT_WE_G (1  29)
  #   define R500_INST_STAT_WE_B (1  30)
@@ -3546,19 +3534,13 @@ enum {
  /*
   * CP type-3 packets
   */
-#define R300_CP_CMD_BITBLT_MULTI   0xC0009B00
-
-/* XXX Corbin's stuff from radeon and r200 */
-
  #define RADEON_WAIT_UNTIL   0x1720
  #   define RADEON_WAIT_CRTC_PFLIP   (1  0)
  #   define RADEON_WAIT_2D_IDLECLEAN (1  16)
  #   define RADEON_WAIT_3D_IDLECLEAN (1  17)
  #   define RADEON_WAIT_HOST_IDLECLEAN   (1  18)

-#define R200_3D_DRAW_IMMD_2  0xC0003500
-
-#define RADEON_CP_PACKET0 0x0 /* XXX stolen from radeon_reg.h */
+#define RADEON_CP_PACKET0   0x
  #define RADEON_CP_PACKET3   0xC000

  #define RADEON_ONE_REG_WR(1  15)
diff --git a/src/gallium/drivers/r300/r300_screen.c 
b/src/gallium/drivers/r300/r300_screen.c
index 640d547..0a0ad16 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -321,7 +321,7 @@ static int r300_get_shader_param(struct pipe_screen 
*pscreen, unsigned shader, e
  case PIPE_SHADER_CAP_MAX_TEMPS:
  return 32;
  case PIPE_SHADER_CAP_MAX_PREDS:
-return is_r500 ? 4 : 0; /* XXX guessed. */
+return is_r500 ? 4 : 0;
  case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
  return 1;
  case PIPE_SHADER_CAP_MAX_TEX_INSTRUCTIONS:
@@ -372,8 +372,6 @@ static float

Re: [Mesa-dev] [PATCH 2/2] r300g: small code cleanup

2015-02-06 Thread David Heidelberg

Ok, I'll do.

About MAX_PREDS, maybe it's time to bring it out again :)

On 02/06/2015 06:16 PM, Marek Olšák wrote:

You can update MAX_PREDS in this patch.

I proposed removing predicates a long time ago, but some people disagreed.

Marek

On Fri, Feb 6, 2015 at 5:19 PM, David Heidelberg da...@ixit.cz wrote:

Should I incorporate PIPE_SHADER_CAP_MAX_PREDS change in this patch or send
another with idea of dropping PIPE_SHADER_CAP_MAX_PREDS completly from
gallium, if there is no use?

David


On 02/06/2015 04:41 PM, Marek Olšák wrote:

This looks good with one exception: MAX_PREDS should be 0 for all
shader stages. It has never been supported and never will be. With
that done, this patch is:

Reviewed-by: Marek Olšák marek.ol...@amd.com

Marek

On Thu, Feb 5, 2015 at 11:56 PM, David Heidelberg da...@ixit.cz wrote:

Signed-off-by: David Heidelberg da...@ixit.cz
---
   src/gallium/drivers/r300/r300_reg.h| 22 ++
   src/gallium/drivers/r300/r300_screen.c |  4 +---
   src/gallium/drivers/r300/r300_state.c  |  1 -
   3 files changed, 3 insertions(+), 24 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_reg.h
b/src/gallium/drivers/r300/r300_reg.h
index 46aeba0..8a0728d 100644
--- a/src/gallium/drivers/r300/r300_reg.h
+++ b/src/gallium/drivers/r300/r300_reg.h
@@ -191,7 +191,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
   #  define R300_VAP_TCL_BYPASS  (1  8)
   /* Read only flag if TCL engine is busy. */
   #  define R300_VAP_PVS_BUSY(1  11)
-/* TODO: gap for MAX_MPS */
   /* Read only flag if the vertex store is busy. */
   #  define R300_VAP_VS_BUSY (1  24)
   /* Read only flag if the reciprocal engine is busy. */
@@ -921,9 +920,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* The line width is given in multiples of 6.
* In default mode lines are classified as vertical lines.
- * HO: horizontal
- * VE: vertical or horizontal
- * HO  VE: no classification
*/
   #define R300_GA_LINE_CNTL 0x4234
   #   define R300_GA_LINE_CNTL_WIDTH_SHIFT   0
@@ -934,12 +930,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
   #  define R300_GA_LINE_CNTL_END_TYPE_COMP (3  16) /* Computed
(perpendicular to slope) */
   #  define R500_GA_LINE_CNTL_SORT_NO   (0  18)
   #  define R500_GA_LINE_CNTL_SORT_MINX_MINY(1  18)
-/** TODO: looks wrong */
-#   define R300_LINESIZE_MAX
(R300_GA_LINE_CNTL_WIDTH_MASK / 6)
-/** TODO: looks wrong */
-#   define R300_LINE_CNT_HO   (1  16)
-/** TODO: looks wrong */
-#   define R300_LINE_CNT_VE   (1  17)

   /* Line Stipple configuration information. */
   #define R300_GA_LINE_STIPPLE_CONFIG   0x4238
@@ -1278,8 +1268,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
   #define R300_RS_IP_1   0x4314
   #define R300_RS_IP_2   0x4318
   #define R300_RS_IP_3   0x431C
-#   define R300_RS_INTERP_SRC_SHIFT  2 /* TODO: check for
removal */
-#   define R300_RS_INTERP_SRC_MASK   (7  2) /* TODO: check
for removal */
   #  define R300_RS_TEX_PTR(x)   (x  0)
   #  define R300_RS_COL_PTR(x)   ((x)  6)
   #  define R300_RS_COL_FMT(x)   ((x)  9)
@@ -3300,7 +3288,7 @@ enum {
   #   define R500_INST_ALPHA_PRED_SEL_   (3  25)
   #   define R500_INST_ALPHA_PRED_SEL_   (4  25)
   #   define R500_INST_ALPHA_PRED_SEL_   (5  25)
-/* XXX next four are kind of guessed */
+/* Next four are guessed, documentation doesn't mention order. */
   #   define R500_INST_STAT_WE_R (1  28)
   #   define R500_INST_STAT_WE_G (1  29)
   #   define R500_INST_STAT_WE_B (1  30)
@@ -3546,19 +3534,13 @@ enum {
   /*
* CP type-3 packets
*/
-#define R300_CP_CMD_BITBLT_MULTI   0xC0009B00
-
-/* XXX Corbin's stuff from radeon and r200 */
-
   #define RADEON_WAIT_UNTIL   0x1720
   #   define RADEON_WAIT_CRTC_PFLIP   (1  0)
   #   define RADEON_WAIT_2D_IDLECLEAN (1  16)
   #   define RADEON_WAIT_3D_IDLECLEAN (1  17)
   #   define RADEON_WAIT_HOST_IDLECLEAN   (1  18)

-#define R200_3D_DRAW_IMMD_2  0xC0003500
-
-#define RADEON_CP_PACKET0 0x0 /* XXX stolen from radeon_reg.h */
+#define RADEON_CP_PACKET0   0x
   #define RADEON_CP_PACKET3   0xC000

   #define RADEON_ONE_REG_WR(1  15)
diff --git a/src/gallium/drivers/r300/r300_screen.c
b/src/gallium/drivers/r300/r300_screen.c
index 640d547..0a0ad16 100644
--- a/src/gallium/drivers/r300/r300_screen.c
+++ b/src/gallium/drivers/r300/r300_screen.c
@@ -321,7 +321,7 @@ static int r300_get_shader_param(struct pipe_screen
*pscreen, unsigned shader, e
   case

[Mesa-dev] [PATCH 1/2] r300g: handle unsupported blend factor gracefully

2015-02-05 Thread David Heidelberg
Rather not assert on known factors, just print warning and use ZERO.

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/drivers/r300/r300_state_inlines.h | 11 ---
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_state_inlines.h 
b/src/gallium/drivers/r300/r300_state_inlines.h
index 97619db..67cd6e6 100644
--- a/src/gallium/drivers/r300/r300_state_inlines.h
+++ b/src/gallium/drivers/r300/r300_state_inlines.h
@@ -60,7 +60,6 @@ static INLINE uint32_t r300_translate_blend_function(int 
blend_func,
 return 0;
 }
 
-/* XXX we can also offer the D3D versions of some of these... */
 static INLINE uint32_t r300_translate_blend_factor(int blend_fact)
 {
 switch (blend_fact) {
@@ -99,17 +98,15 @@ static INLINE uint32_t r300_translate_blend_factor(int 
blend_fact)
 case PIPE_BLENDFACTOR_SRC1_ALPHA:
 case PIPE_BLENDFACTOR_INV_SRC1_COLOR:
 case PIPE_BLENDFACTOR_INV_SRC1_ALPHA:
-fprintf(stderr, r300: Implementation error: 
-Bad blend factor %d not supported!\n, blend_fact);
-assert(0);
-break;
+fprintf(stderr, r300: Unsupported blend factor %d!\n,
+blend_fact);
+return R300_BLEND_GL_ZERO;
 
 default:
 fprintf(stderr, r300: Unknown blend factor %d\n, blend_fact);
 assert(0);
-break;
+return 0;
 }
-return 0;
 }
 
 /* DSA state. */
-- 
2.2.2

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] r300g: small code cleanup

2015-02-05 Thread David Heidelberg


On 02/06/2015 12:57 AM, Matt Turner wrote:

On Thu, Feb 5, 2015 at 2:56 PM, David Heidelberg da...@ixit.cz wrote:

Signed-off-by: David Heidelberg da...@ixit.cz
---

This is not a small clean up. This is removing a bunch of potentially
informative comments.

I checked sources  docs:
 * all unsure comments has been verified in docs (so I removed XXX mark)
 * all XXX parts are not used in code and not available in docs
 * some copy-pasted old code is also completly unused and just pop up 
when grepping for XXX/TODO/FIXME etc.

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] r300g: handle unsupported blend factor gracefully

2015-02-05 Thread David Heidelberg
these days all (r600+,nv50+) modern HW support 
PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS Konsole output which r300 don't.


Instead of adding another expensive checks to Nine, this is way to 
simply avoid it and do not cause assertion at no cost.


David

On 02/06/2015 12:59 AM, Matt Turner wrote:

On Thu, Feb 5, 2015 at 2:56 PM, David Heidelberg da...@ixit.cz wrote:

Rather not assert on known factors, just print warning and use ZERO.

... because this allows me to do something and I cannot fix the
actual bug because of some reason ...?
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] mesa: Fix some signed-unsigned comparison warnings

2015-01-14 Thread David Heidelberg
 gl_vertex_attrib_array *array;
 GLbitfield typeBit;
-   GLuint elementSize;
+   GLint elementSize;
 GLenum format = GL_RGBA;
  
 if (ctx-Array.LegalTypesMask == 0 || ctx-Array.LegalTypesMaskAPI != ctx-API) {

diff --git a/src/mesa/program/prog_execute.c b/src/mesa/program/prog_execute.c
index 85aba00..b2fbc80 100644
--- a/src/mesa/program/prog_execute.c
+++ b/src/mesa/program/prog_execute.c
@@ -123,7 +123,7 @@ get_src_register_pointer(const struct prog_src_register 
*source,
return (GLfloat *) prog-Parameters-ParameterValues[reg];
  
 case PROGRAM_SYSTEM_VALUE:

-  assert(reg  Elements(machine-SystemValues));
+  assert(reg  (GLint) Elements(machine-SystemValues));
return machine-SystemValues[reg];
  
 default:

diff --git a/src/mesa/program/prog_optimize.c b/src/mesa/program/prog_optimize.c
index 60530eb..116dda6 100644
--- a/src/mesa/program/prog_optimize.c
+++ b/src/mesa/program/prog_optimize.c
@@ -408,7 +408,7 @@ find_next_use(const struct gl_program *prog,
  for (j = 0; j  numSrc; j++) {
 if (inst-SrcReg[j].RelAddr ||
 (inst-SrcReg[j].File == PROGRAM_TEMPORARY 
-   inst-SrcReg[j].Index == index 
+   inst-SrcReg[j].Index == (GLint)index 
 (get_src_arg_mask(inst,j,NO_MASK)  mask)))
return READ;
  }
@@ -944,7 +944,7 @@ update_interval(GLint intBegin[], GLint intEnd[],
struct loop_info *loopStack, GLuint loopStackDepth,
GLuint index, GLuint ic)
  {
-   int i;
+   unsigned int i;
in other cases you use only unsigned without int, which should be enough 
also here ;)


Anyway, always happy with less compiler warnings, so if it matter:

Reviewed-by: David Heidelberg da...@ixit.cz

 GLuint begin = ic;
 GLuint end = ic;
  
diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c

index 4a5c1c1..3f499749 100644
--- a/src/mesa/program/prog_print.c
+++ b/src/mesa/program/prog_print.c
@@ -82,7 +82,7 @@ _mesa_register_file_name(gl_register_file f)
   * Return ARB_v/f_prog-style input attrib string.
   */
  static const char *
-arb_input_attrib_string(GLint index, GLenum progType)
+arb_input_attrib_string(GLuint index, GLenum progType)
  {
 /*
  * These strings should match the VERT_ATTRIB_x and VARYING_SLOT_x tokens.
@@ -242,7 +242,7 @@ _mesa_print_fp_inputs(GLbitfield inputs)
   * Return ARB_v/f_prog-style output attrib string.
   */
  static const char *
-arb_output_attrib_string(GLint index, GLenum progType)
+arb_output_attrib_string(GLuint index, GLenum progType)
  {
 /*
  * These strings should match the VARYING_SLOT_x and FRAG_RESULT_x tokens.
diff --git a/src/mesa/state_tracker/st_atom_blend.c 
b/src/mesa/state_tracker/st_atom_blend.c
index 064e0c1..6bb4077 100644
--- a/src/mesa/state_tracker/st_atom_blend.c
+++ b/src/mesa/state_tracker/st_atom_blend.c
@@ -175,7 +175,7 @@ static GLboolean
  blend_per_rt(const struct gl_context *ctx)
  {
 if (ctx-Color.BlendEnabled 
-  (ctx-Color.BlendEnabled != ((1  ctx-Const.MaxDrawBuffers) - 1))) {
+  (ctx-Color.BlendEnabled != ((1U  ctx-Const.MaxDrawBuffers) - 1))) {
/* This can only happen if GL_EXT_draw_buffers2 is enabled */
return GL_TRUE;
 }
diff --git a/src/mesa/state_tracker/st_atom_scissor.c 
b/src/mesa/state_tracker/st_atom_scissor.c
index b720309..4ebe799 100644
--- a/src/mesa/state_tracker/st_atom_scissor.c
+++ b/src/mesa/state_tracker/st_atom_scissor.c
@@ -47,7 +47,7 @@ update_scissor( struct st_context *st )
 const struct gl_context *ctx = st-ctx;
 const struct gl_framebuffer *fb = ctx-DrawBuffer;
 GLint miny, maxy;
-   int i;
+   unsigned i;
 bool changed = false;
 for (i = 0 ; i  ctx-Const.MaxViewports; i++) {
scissor[i].minx = 0;
diff --git a/src/mesa/state_tracker/st_atom_viewport.c 
b/src/mesa/state_tracker/st_atom_viewport.c
index efa056e..2f62590 100644
--- a/src/mesa/state_tracker/st_atom_viewport.c
+++ b/src/mesa/state_tracker/st_atom_viewport.c
@@ -44,7 +44,7 @@ update_viewport( struct st_context *st )
  {
 struct gl_context *ctx = st-ctx;
 GLfloat yScale, yBias;
-   int i;
+   unsigned i;
 /* _NEW_BUFFERS
  */
 if (st_fb_orientation(ctx-DrawBuffer) == Y_0_TOP) {
diff --git a/src/mesa/state_tracker/st_cb_fbo.c 
b/src/mesa/state_tracker/st_cb_fbo.c
index 7b6a444..296ea1e 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -408,9 +408,9 @@ st_update_renderbuffer_surface(struct st_context *st,
  {
 struct pipe_context *pipe = st-pipe;
 struct pipe_resource *resource = strb-texture;
-   int rtt_width = strb-Base.Width;
-   int rtt_height = strb-Base.Height;
-   int rtt_depth = strb-Base.Depth;
+   unsigned rtt_width = strb-Base.Width;
+   unsigned rtt_height = strb-Base.Height;
+   unsigned rtt_depth = strb-Base.Depth;
 /*
  * For winsys fbo, it is possible that the renderbuffer is sRGB-capable

Re: [Mesa-dev] [PATCH v2 50/52] st/nine: Explicit nine requirements

2015-01-10 Thread David Heidelberg
I'd prefer not have to revert this patch on my personal r400 based RS690 
(laptop AMD X1250). You're correct, that most of applications won't run.


Still, there are some earlier DX9 apps, which runs and LFS which shows 
really visible performance boost from unplayable 10 fps to 20-25fps fps.


As in previous conversation we had, I'd prefer pushing this patch only 
at moment, when it's already required by some rework or something which 
completly disallow  r500 to work.


On 01/10/2015 11:47 AM, Axel Davy wrote:

This patch raises nine requirements and disables nine for old
hw that don't match them.

It would be possible to make a lot of things work with these hw,
though not everything, but it needs special care for them in the
code, and since they are very old, it's better to drop explicitly
support for them. We are already having hard time supporting r500,
which is the most flexible dx9-only card apparently.

Signed-off-by: Axel Davy axel.d...@ens.fr
---
  src/gallium/state_trackers/nine/adapter9.c | 106 +
  src/gallium/state_trackers/nine/device9.c  |   9 +--
  2 files changed, 66 insertions(+), 49 deletions(-)

diff --git a/src/gallium/state_trackers/nine/adapter9.c 
b/src/gallium/state_trackers/nine/adapter9.c
index 481f863..bdf547e 100644
--- a/src/gallium/state_trackers/nine/adapter9.c
+++ b/src/gallium/state_trackers/nine/adapter9.c
@@ -39,6 +39,7 @@ NineAdapter9_ctor( struct NineAdapter9 *This,
 struct NineUnknownParams *pParams,
 struct d3dadapter9_context *pCTX )
  {
+struct pipe_screen *hal = pCTX-hal;
  HRESULT hr = NineUnknown_ctor(This-base, pParams);
  if (FAILED(hr)) { return hr; }
  
@@ -46,7 +47,7 @@ NineAdapter9_ctor( struct NineAdapter9 *This,

  nine_dump_D3DADAPTER_IDENTIFIER9(DBG_CHANNEL, pCTX-identifier);
  
  This-ctx = pCTX;

-if (!This-ctx-hal-get_param(This-ctx-hal, PIPE_CAP_CLIP_HALFZ)) {
+if (!hal-get_param(hal, PIPE_CAP_CLIP_HALFZ)) {
  ERR(Driver doesn't support d3d9 coordinates\n);
  return D3DERR_DRIVERINTERNALERROR;
  }
@@ -54,7 +55,44 @@ NineAdapter9_ctor( struct NineAdapter9 *This,
  !This-ctx-ref-get_param(This-ctx-ref, PIPE_CAP_CLIP_HALFZ)) {
  ERR(Warning: Sotware rendering driver doesn't support d3d9 
coordinates\n);
  }
-
+/* Old cards had tricks to bypass some restrictions to implement
+ * everything and fit tight the requirements: number of constants,
+ * number of temp registers, special behaviours, etc. Since we don't
+ * have access to all this, we need a bit more than what dx9 required.
+ * For example we have to use more than 32 temp registers to emulate
+ * behaviours, while some dx9 hw don't have more. As for sm2 hardware,
+ * we could support vs2 / ps2 for them but it needs some more care, and
+ * as these are very old, we choose to drop support for them */
+
+/* checks minimum requirements, most are vs3/ps3 strict requirements */
+if (!hal-get_param(hal, PIPE_CAP_SM3) ||
+hal-get_shader_param(hal, PIPE_SHADER_VERTEX,
+  PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE)  256 * 
sizeof(float[4]) ||
+hal-get_shader_param(hal, PIPE_SHADER_FRAGMENT,
+  PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE)  244 * 
sizeof(float[4]) ||
+hal-get_shader_param(hal, PIPE_SHADER_VERTEX,
+  PIPE_SHADER_CAP_MAX_TEMPS)  32 ||
+hal-get_shader_param(hal, PIPE_SHADER_FRAGMENT,
+  PIPE_SHADER_CAP_MAX_TEMPS)  32 ||
+hal-get_shader_param(hal, PIPE_SHADER_VERTEX,
+  PIPE_SHADER_CAP_MAX_INPUTS)  16 ||
+hal-get_shader_param(hal, PIPE_SHADER_FRAGMENT,
+  PIPE_SHADER_CAP_MAX_INPUTS)  10) {
+ERR(Your card is not supported by Gallium Nine. Minimum requirement 
+is = r500, = nv50, = i965\n);
+return D3DERR_DRIVERINTERNALERROR;
+}
+/* for r500 */
+if (hal-get_shader_param(hal, PIPE_SHADER_VERTEX,
+  PIPE_SHADER_CAP_MAX_CONST_BUFFER_SIZE)  276 * 
sizeof(float[4]) || /* we put bool and int constants with float constants */
+hal-get_shader_param(hal, PIPE_SHADER_VERTEX,
+  PIPE_SHADER_CAP_MAX_TEMPS)  40 || /* we use 
some more temp registers */
+hal-get_shader_param(hal, PIPE_SHADER_FRAGMENT,
+  PIPE_SHADER_CAP_MAX_TEMPS)  40 ||
+hal-get_shader_param(hal, PIPE_SHADER_FRAGMENT,
+  PIPE_SHADER_CAP_MAX_INPUTS)  20) /* we don't 
pack inputs as much as we could */
+ERR(Your card is at the limit of Gallium Nine requirements. Some games 

+may run into issues because requirements are too tight\n);
  return D3D_OK;
  }
  
@@ -472,7 +510,6 @@ NineAdapter9_GetDeviceCaps( struct NineAdapter9 *This,

  D3DCAPS9 

[Mesa-dev] [PATCH] r300g: implement ARR opcode

2014-12-19 Thread David Heidelberg
Same as ARL, just has extra rounding.
Useful for st/nine.

Tested-by: Pavel Ondračka pavel.ondra...@email.cz
Reviewed-by: Marek Olšák marek.ol...@amd.com
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/drivers/r300/compiler/r3xx_vertprog.c  | 7 ---
 src/gallium/drivers/r300/compiler/radeon_opcodes.c | 7 +++
 src/gallium/drivers/r300/compiler/radeon_opcodes.h | 4 
 src/gallium/drivers/r300/r300_tgsi_to_rc.c | 2 +-
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r300/compiler/r3xx_vertprog.c 
b/src/gallium/drivers/r300/compiler/r3xx_vertprog.c
index fd4f6f4..2ff6db5 100644
--- a/src/gallium/drivers/r300/compiler/r3xx_vertprog.c
+++ b/src/gallium/drivers/r300/compiler/r3xx_vertprog.c
@@ -405,6 +405,7 @@ static void translate_vertex_program(struct radeon_compiler 
*c, void *user)
switch (vpi-Opcode) {
case RC_OPCODE_ADD: ei_vector2(compiler-code, VE_ADD, vpi, 
inst); break;
case RC_OPCODE_ARL: ei_vector1(compiler-code, VE_FLT2FIX_DX, 
vpi, inst); break;
+   case RC_OPCODE_ARR: ei_vector1(compiler-code, 
VE_FLT2FIX_DX_RND, vpi, inst); break;
case RC_OPCODE_COS: ei_math1(compiler-code, ME_COS, vpi, 
inst); break;
case RC_OPCODE_DP4: ei_vector2(compiler-code, VE_DOT_PRODUCT, 
vpi, inst); break;
case RC_OPCODE_DST: ei_vector2(compiler-code, 
VE_DISTANCE_VECTOR, vpi, inst); break;
@@ -798,7 +799,7 @@ static void transform_negative_addressing(struct 
r300_vertex_program_compiler *c
struct rc_instruction *inst, *add;
unsigned const_swizzle;
 
-   /* Transform ARL */
+   /* Transform ARL/ARR */
add = rc_insert_new_instruction(c-Base, arl-Prev);
add-U.I.Opcode = RC_OPCODE_ADD;
add-U.I.DstReg.File = RC_FILE_TEMPORARY;
@@ -833,7 +834,7 @@ static void rc_emulate_negative_addressing(struct 
radeon_compiler *compiler, voi
for (inst = c-Base.Program.Instructions.Next; inst != 
c-Base.Program.Instructions; inst = inst-Next) {
const struct rc_opcode_info * opcode = 
rc_get_opcode_info(inst-U.I.Opcode);
 
-   if (inst-U.I.Opcode == RC_OPCODE_ARL) {
+   if (inst-U.I.Opcode == RC_OPCODE_ARL || inst-U.I.Opcode == 
RC_OPCODE_ARR) {
if (lastARL != NULL  min_offset  0)
transform_negative_addressing(c, lastARL, inst, 
min_offset);
 
@@ -847,7 +848,7 @@ static void rc_emulate_negative_addressing(struct 
radeon_compiler *compiler, voi
inst-U.I.SrcReg[i].Index  0) {
/* ARL must precede any indirect addressing. */
if (lastARL == NULL) {
-   rc_error(c-Base, Vertex shader: 
Found relative addressing without ARL.);
+   rc_error(c-Base, Vertex shader: 
Found relative addressing without ARL/ARR.);
return;
}
 
diff --git a/src/gallium/drivers/r300/compiler/radeon_opcodes.c 
b/src/gallium/drivers/r300/compiler/radeon_opcodes.c
index 916baa2..a251bbe 100644
--- a/src/gallium/drivers/r300/compiler/radeon_opcodes.c
+++ b/src/gallium/drivers/r300/compiler/radeon_opcodes.c
@@ -60,6 +60,12 @@ struct rc_opcode_info rc_opcodes[MAX_RC_OPCODE] = {
.HasDstReg = 1
},
{
+   .Opcode = RC_OPCODE_ARR,
+   .Name = ARR,
+   .NumSrcRegs = 1,
+   .HasDstReg = 1
+   },
+   {
.Opcode = RC_OPCODE_CEIL,
.Name = CEIL,
.NumSrcRegs = 1,
@@ -546,6 +552,7 @@ void rc_compute_sources_for_writemask(
} else {
switch(opcode-Opcode) {
case RC_OPCODE_ARL:
+   case RC_OPCODE_ARR:
srcmasks[0] |= RC_MASK_X;
break;
case RC_OPCODE_DP2:
diff --git a/src/gallium/drivers/r300/compiler/radeon_opcodes.h 
b/src/gallium/drivers/r300/compiler/radeon_opcodes.h
index 0a70901..1c42505 100644
--- a/src/gallium/drivers/r300/compiler/radeon_opcodes.h
+++ b/src/gallium/drivers/r300/compiler/radeon_opcodes.h
@@ -47,6 +47,10 @@ typedef enum {
 * dst.x = floor(src.x), where dst must be an address register */
RC_OPCODE_ARL,
 
+   /** special instruction: load address register with round
+* dst.x = round(src.x), where dst must be an address register */
+   RC_OPCODE_ARR,
+
/** vec4 instruction: dst.c = ceil(src0.c) */
RC_OPCODE_CEIL,
 
diff --git a/src/gallium/drivers/r300/r300_tgsi_to_rc.c 
b/src/gallium/drivers/r300/r300_tgsi_to_rc.c
index b82cb3e..4d94941 100644
--- a/src/gallium/drivers/r300/r300_tgsi_to_rc.c
+++ b/src/gallium/drivers/r300/r300_tgsi_to_rc.c
@@ -82,7 +82,7 @@ static unsigned translate_opcode(unsigned opcode)
  /* case

[Mesa-dev] [PATCH] st/nine: fix DBG typo (trivial)

2014-12-19 Thread David Heidelberg
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/device9.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index b0e42eb..1d97688 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -1219,7 +1219,7 @@ NineDevice9_StretchRect( struct NineDevice9 *This,
 pSourceRect-left, pSourceRect-top,
 pSourceRect-right, pSourceRect-bottom);
 if (pDestRect)
-DBG(pSourceRect=(%u,%u)-(%u,%u)\n, pDestRect-left, pDestRect-top,
+DBG(pDestRect=(%u,%u)-(%u,%u)\n, pDestRect-left, pDestRect-top,
 pDestRect-right, pDestRect-bottom);
 
 user_assert(!zs || !This-in_scene, D3DERR_INVALIDCALL);
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 01/19] st/nine: clean device9ex.

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Pass ex specific parameters as arguments to device9 ctor instead
of passing them by filling the structure.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/adapter9.c  |  2 +-
 src/gallium/state_trackers/nine/device9.c   | 19 +++
 src/gallium/state_trackers/nine/device9.h   |  7 +--
 src/gallium/state_trackers/nine/device9ex.c |  6 ++
 4 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/gallium/state_trackers/nine/adapter9.c 
b/src/gallium/state_trackers/nine/adapter9.c
index 8d574de..e409d5f 100644
--- a/src/gallium/state_trackers/nine/adapter9.c
+++ b/src/gallium/state_trackers/nine/adapter9.c
@@ -990,7 +990,7 @@ NineAdapter9_CreateDevice( struct NineAdapter9 *This,
 params.BehaviorFlags = BehaviorFlags;
 
 hr = NineDevice9_new(screen, params, caps, pPresentationParameters,
- pD3D9, pPresentationGroup, This-ctx,
+ pD3D9, pPresentationGroup, This-ctx, FALSE, NULL,
  (struct NineDevice9 **)ppReturnedDeviceInterface);
 if (FAILED(hr)) {
 DBG(Failed to create device.\n);
diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index 7d2142d..5f95b42 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -139,7 +139,9 @@ NineDevice9_ctor( struct NineDevice9 *This,
   D3DPRESENT_PARAMETERS *pPresentationParameters,
   IDirect3D9 *pD3D9,
   ID3DPresentGroup *pPresentationGroup,
-  struct d3dadapter9_context *pCTX )
+  struct d3dadapter9_context *pCTX,
+  boolean ex,
+  D3DDISPLAYMODEEX *pFullscreenDisplayMode )
 {
 unsigned i;
 HRESULT hr = NineUnknown_ctor(This-base, pParams);
@@ -151,6 +153,7 @@ NineDevice9_ctor( struct NineDevice9 *This,
 This-caps = *pCaps;
 This-d3d9 = pD3D9;
 This-params = *pCreationParameters;
+This-ex = ex;
 This-present = pPresentationGroup;
 IDirect3D9_AddRef(This-d3d9);
 ID3DPresentGroup_AddRef(This-present);
@@ -177,12 +180,12 @@ NineDevice9_ctor( struct NineDevice9 *This,
 if (FAILED(hr))
 return hr;
 
-if (This-ex) {
+if (ex) {
 D3DDISPLAYMODEEX *mode = NULL;
 struct NineSwapChain9Ex **ret =
 (struct NineSwapChain9Ex **)This-swapchains[i];
 
-if (This-pFullscreenDisplayMode) mode = 
(This-pFullscreenDisplayMode[i]);
+if (pFullscreenDisplayMode) mode = (pFullscreenDisplayMode[i]);
 /* when this is a Device9Ex, it should create SwapChain9Exs */
 hr = NineSwapChain9Ex_new(This, TRUE, present,
   pPresentationParameters[i], pCTX,
@@ -310,9 +313,6 @@ NineDevice9_ctor( struct NineDevice9 *This,
 This-update = This-state;
 nine_update_state(This, ~0);
 
-/* Is just used to pass the parameter from NineDevice9Ex_ctor */
-This-pFullscreenDisplayMode = NULL;
-
 ID3DPresentGroup_Release(This-present);
 
 return D3D_OK;
@@ -974,7 +974,7 @@ create_zs_or_rt_surface(struct NineDevice9 *This,
 } else {
 resource = NULL;
 }
-hr = NineSurface9_new(This, NULL, resource, 0, 0, 0, desc, surface);
+hr = NineSurface9_new(This, NULL, resource, NULL, 0, 0, 0, desc, 
surface);
 pipe_resource_reference(resource, NULL);
 
 if (SUCCEEDED(hr))
@@ -3447,6 +3447,8 @@ NineDevice9_new( struct pipe_screen *pScreen,
  IDirect3D9 *pD3D9,
  ID3DPresentGroup *pPresentationGroup,
  struct d3dadapter9_context *pCTX,
+ boolean ex,
+ D3DDISPLAYMODEEX *pFullscreenDisplayMode,
  struct NineDevice9 **ppOut )
 {
 BOOL lock;
@@ -3454,5 +3456,6 @@ NineDevice9_new( struct pipe_screen *pScreen,
 
 NINE_NEW(Device9, ppOut, lock, /* args */
  pScreen, pCreationParameters, pCaps,
- pPresentationParameters, pD3D9, pPresentationGroup, pCTX);
+ pPresentationParameters, pD3D9, pPresentationGroup, pCTX,
+ ex, pFullscreenDisplayMode);
 }
diff --git a/src/gallium/state_trackers/nine/device9.h 
b/src/gallium/state_trackers/nine/device9.h
index 9dc248e..3649e1b 100644
--- a/src/gallium/state_trackers/nine/device9.h
+++ b/src/gallium/state_trackers/nine/device9.h
@@ -48,7 +48,6 @@ struct NineDevice9
 {
 struct NineUnknown base;
 boolean ex;
-D3DDISPLAYMODEEX *pFullscreenDisplayMode;
 
 /* G3D context */
 struct pipe_screen *screen;
@@ -134,6 +133,8 @@ NineDevice9_new( struct pipe_screen *pScreen,
  IDirect3D9 *pD3D9,
  ID3DPresentGroup *pPresentationGroup,
  struct d3dadapter9_context *pCTX

[Mesa-dev] [PATCH v3 02/19] st/nine: Rework Basetexture9 and Resource9.

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Instead of having parts of the structures initialised by the parents,
have them initialised by the children.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/basetexture9.c   | 19 +++
 src/gallium/state_trackers/nine/basetexture9.h   |  5 -
 src/gallium/state_trackers/nine/cubetexture9.c   |  7 ++-
 src/gallium/state_trackers/nine/indexbuffer9.c   |  4 ++--
 src/gallium/state_trackers/nine/resource9.c  |  8 +++-
 src/gallium/state_trackers/nine/resource9.h  |  4 +++-
 src/gallium/state_trackers/nine/surface9.c   |  6 ++
 src/gallium/state_trackers/nine/texture9.c   |  5 +
 src/gallium/state_trackers/nine/vertexbuffer9.c  |  4 ++--
 src/gallium/state_trackers/nine/volumetexture9.c |  7 ++-
 10 files changed, 36 insertions(+), 33 deletions(-)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 89f6269..6d41592 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -41,25 +41,28 @@
 HRESULT
 NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
struct NineUnknownParams *pParams,
+   struct pipe_resource *initResource,
D3DRESOURCETYPE Type,
-   D3DPOOL Pool )
+   D3DFORMAT format,
+   D3DPOOL Pool,
+   DWORD Usage)
 {
-BOOL alloc = (Pool == D3DPOOL_DEFAULT)  !This-base.resource 
-(This-format != D3DFMT_NULL);
+BOOL alloc = (Pool == D3DPOOL_DEFAULT)  !initResource 
+(format != D3DFMT_NULL);
 HRESULT hr;
-DWORD usage = This-base.usage;
 
-user_assert(!(usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
+user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
 Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
-user_assert(!(usage  D3DUSAGE_DYNAMIC) ||
+user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
 Pool != D3DPOOL_MANAGED, D3DERR_INVALIDCALL);
 
-hr = NineResource9_ctor(This-base, pParams, alloc, Type, Pool);
+hr = NineResource9_ctor(This-base, pParams, initResource, alloc, Type, 
Pool, Usage);
 if (FAILED(hr))
 return hr;
 
+This-format = format;
 This-pipe = pParams-device-pipe;
-This-mipfilter = (This-base.usage  D3DUSAGE_AUTOGENMIPMAP) ?
+This-mipfilter = (Usage  D3DUSAGE_AUTOGENMIPMAP) ?
 D3DTEXF_LINEAR : D3DTEXF_NONE;
 This-lod = 0;
 This-lod_resident = -1;
diff --git a/src/gallium/state_trackers/nine/basetexture9.h 
b/src/gallium/state_trackers/nine/basetexture9.h
index d615376..0062771 100644
--- a/src/gallium/state_trackers/nine/basetexture9.h
+++ b/src/gallium/state_trackers/nine/basetexture9.h
@@ -59,8 +59,11 @@ NineBaseTexture9( void *data )
 HRESULT
 NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
struct NineUnknownParams *pParams,
+   struct pipe_resource *initResource,
D3DRESOURCETYPE Type,
-   D3DPOOL Pool );
+   D3DFORMAT format,
+   D3DPOOL Pool,
+   DWORD Usage);
 
 void
 NineBaseTexture9_dtor( struct NineBaseTexture9 *This );
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 77802e7..4f63162 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -50,9 +50,6 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 if (Usage  D3DUSAGE_AUTOGENMIPMAP)
 Levels = 0;
 
-This-base.format = Format;
-This-base.base.usage = Usage;
-
 info-screen = pParams-device-screen;
 info-target = PIPE_TEXTURE_CUBE;
 info-format = d3d9_to_pipe_format(Format);
@@ -85,8 +82,8 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 if (!This-surfaces)
 return E_OUTOFMEMORY;
 
-hr = NineBaseTexture9_ctor(This-base, pParams, D3DRTYPE_CUBETEXTURE,
-   Pool);
+hr = NineBaseTexture9_ctor(This-base, pParams, NULL, 
D3DRTYPE_CUBETEXTURE,
+   Format, Pool, Usage);
 if (FAILED(hr))
 return hr;
 This-base.pstype = 2;
diff --git a/src/gallium/state_trackers/nine/indexbuffer9.c 
b/src/gallium/state_trackers/nine/indexbuffer9.c
index c5606f1..48553fd 100644
--- a/src/gallium/state_trackers/nine/indexbuffer9.c
+++ b/src/gallium/state_trackers/nine/indexbuffer9.c
@@ -76,8 +76,8 @@ NineIndexBuffer9_ctor( struct NineIndexBuffer9 *This,
 info-last_level = 0;
 info-nr_samples = 0;
 
-hr = NineResource9_ctor(This-base, pParams, TRUE, D3DRTYPE_INDEXBUFFER,
-pDesc-Pool);
+hr

[Mesa-dev] [PATCH v3 05/19] st/nine: propertly declare constants (v2)

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Fixes Error : CONST[20]: Undeclared source register when running
dx9_alpha_blending_material. Also artifacts on ilo.

v2: also remove unused MISC_CONST

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Reviewed-by: Ilia Mirkin imir...@alum.mit.edu
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/nine_ff.c | 7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index 6890933..184c411 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -189,13 +189,10 @@ static void nine_ureg_tgsi_dump(struct ureg_program 
*ureg, boolean override)
 
 /* AL should contain base address of lights table. */
 #define LIGHT_CONST(i)\
-ureg_src_indirect(ureg_src_register(TGSI_FILE_CONSTANT, (i)), _X(AL))
+ureg_src_indirect(ureg_DECL_constant(ureg, i), _X(AL))
 
 #define MATERIAL_CONST(i) \
-ureg_src_register(TGSI_FILE_CONSTANT, 19 + (i))
-
-#define MISC_CONST(i) \
-ureg_src_register(TGSI_FILE_CONSTANT, (i))
+ureg_DECL_constant(ureg, 19 + (i))
 
 #define _CONST(n) ureg_DECL_constant(ureg, n)
 
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 04/19] st/nine: call DBG() at more external entry points

2014-11-24 Thread David Heidelberg
From: Stanislaw Halik stha...@misaki.pl

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: Ilia Mirkin imir...@alum.mit.edu
Reviewed-by: David Heidelberg da...@ixit.cz
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: Stanislaw Halik stha...@misaki.pl
---
 src/gallium/state_trackers/nine/basetexture9.c | 17 
 src/gallium/state_trackers/nine/cubetexture9.c | 17 
 src/gallium/state_trackers/nine/device9.c  | 46 ++
 src/gallium/state_trackers/nine/device9ex.c| 15 +++
 src/gallium/state_trackers/nine/iunknown.c |  2 +
 src/gallium/state_trackers/nine/pixelshader9.c |  4 ++
 src/gallium/state_trackers/nine/query9.c   |  7 
 src/gallium/state_trackers/nine/resource9.c| 11 ++
 src/gallium/state_trackers/nine/stateblock9.c  |  3 ++
 src/gallium/state_trackers/nine/surface9.c |  7 
 src/gallium/state_trackers/nine/swapchain9.c   |  5 +++
 src/gallium/state_trackers/nine/swapchain9ex.c |  4 ++
 src/gallium/state_trackers/nine/texture9.c |  5 +++
 .../state_trackers/nine/vertexdeclaration9.c   |  5 +++
 src/gallium/state_trackers/nine/vertexshader9.c|  3 ++
 src/gallium/state_trackers/nine/volume9.c  |  8 
 src/gallium/state_trackers/nine/volumetexture9.c   | 12 ++
 17 files changed, 171 insertions(+)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 7bf2f56..12da1e0 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -51,6 +51,9 @@ NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
 (format != D3DFMT_NULL);
 HRESULT hr;
 
+DBG(This=%p, pParams=%p initResource=%p Type=%d format=%d Pool=%d 
Usage=%d\n,
+This, pParams, initResource, Type, format, Pool, Usage);
+
 user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
 Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
 user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
@@ -93,6 +96,8 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 {
 DWORD old = This-lod;
 
+DBG(This=%p LODNew=%d\n, This, LODNew);
+
 user_assert(This-base.pool == D3DPOOL_MANAGED, 0);
 
 This-lod = MIN2(LODNew, This-base.info.last_level);
@@ -106,12 +111,16 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 DWORD WINAPI
 NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-lod;
 }
 
 DWORD WINAPI
 NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-base.usage  D3DUSAGE_AUTOGENMIPMAP)
 return 1;
 return This-base.info.last_level + 1;
@@ -121,6 +130,8 @@ HRESULT WINAPI
 NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
D3DTEXTUREFILTERTYPE FilterType )
 {
+DBG(This=%p FilterType=%d\n, This, FilterType);
+
 if (!(This-base.usage  D3DUSAGE_AUTOGENMIPMAP))
 return D3D_OK;
 user_assert(FilterType != D3DTEXF_NONE, D3DERR_INVALIDCALL);
@@ -133,6 +144,8 @@ NineBaseTexture9_SetAutoGenFilterType( struct 
NineBaseTexture9 *This,
 D3DTEXTUREFILTERTYPE WINAPI
 NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-mipfilter;
 }
 
@@ -433,6 +446,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 struct pipe_sampler_view templ;
 uint8_t swizzle[4];
 
+DBG(This=%p sRGB=%d\n, This, sRGB);
+
 if (unlikely(!resource)) {
if (unlikely(This-format == D3DFMT_NULL))
 return D3D_OK;
@@ -485,6 +500,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 void WINAPI
 NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-dirty  This-base.pool == D3DPOOL_MANAGED)
 NineBaseTexture9_UploadSelf(This);
 }
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 5ef09f7..9f5d8e2 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -42,6 +42,11 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 D3DSURFACE_DESC sfdesc;
 HRESULT hr;
 
+DBG(This=%p pParams=%p EdgeLength=%u Levels=%u Usage=%d 
+Format=%d Pool=%d pSharedHandle=%p\n,
+This, pParams, EdgeLength, Levels, Usage,
+Format, Pool, pSharedHandle);
+
 user_assert(!(Usage  D3DUSAGE_AUTOGENMIPMAP) ||
 (Pool != D3DPOOL_SYSTEMMEM  Levels = 1), 
D3DERR_INVALIDCALL);
 
@@ -135,6 +140,8 @@ NineCubeTexture9_GetLevelDesc( struct NineCubeTexture9 
*This,
UINT Level,
D3DSURFACE_DESC *pDesc )
 {
+DBG(This=%p Level=%u pDesc=%p\n, This, Level, pDesc);
+
 user_assert

[Mesa-dev] [PATCH v3 06/19] st/nine: Add pool check to SetTexture (v2)

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

D3DPOOL_SCRATCH is disallowed according to spec.
D3DPOOL_SYSTEMMEM should be allowed but we don't handle it right for now.

v2: Fixes segfault in SetTexture when unsetting the texture

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c | 10 +-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index e083536..66d5e66 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -2199,6 +2199,7 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 IDirect3DBaseTexture9 *pTexture )
 {
 struct nine_state *state = This-update;
+struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 
 DBG(This=%p Stage=%u pTexture=%p\n, This, Stage, pTexture);
 
@@ -2206,12 +2207,19 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 Stage == D3DDMAPSAMPLER ||
 (Stage = D3DVERTEXTEXTURESAMPLER0 
  Stage = D3DVERTEXTEXTURESAMPLER3), D3DERR_INVALIDCALL);
+user_assert(!tex || tex-base.pool != D3DPOOL_SCRATCH, D3DERR_INVALIDCALL);
+
+if (unlikely(tex  tex-base.pool == D3DPOOL_SYSTEMMEM)) {
+/* TODO: Currently not implemented. Better return error
+ * with message telling what's wrong */
+ERR(This=%p D3DPOOL_SYSTEMMEM not implemented for SetTexture\n, 
This);
+user_assert(tex-base.pool != D3DPOOL_SYSTEMMEM, D3DERR_INVALIDCALL);
+}
 
 if (Stage = D3DDMAPSAMPLER)
 Stage = Stage - D3DDMAPSAMPLER + NINE_MAX_SAMPLERS_PS;
 
 if (!This-is_recording) {
-struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 struct NineBaseTexture9 *old = state-texture[Stage];
 if (old == tex)
 return D3D_OK;
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 03/19] st/nine: rework the way D3DPOOL_SYSTEMMEM is handled

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

This patch moves the data field from Resource9 to Surface9 and cleans
D3DPOOL_SYSTEMMEM handling in Texture9. This fixes HL2 lost coast.

It also removes in Texture9 some code written to support importing
and exporting non D3DPOOL_SYSTEMMEM shared buffers. This code hadn't
the design required to support the feature and wasn't used.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/basetexture9.c |   4 +-
 src/gallium/state_trackers/nine/cubetexture9.c |   2 +-
 src/gallium/state_trackers/nine/resource9.c|   5 --
 src/gallium/state_trackers/nine/resource9.h|   2 -
 src/gallium/state_trackers/nine/surface9.c | 106 ++---
 src/gallium/state_trackers/nine/surface9.h |   7 +-
 src/gallium/state_trackers/nine/swapchain9.c   |   6 +-
 src/gallium/state_trackers/nine/texture9.c |  46 ---
 8 files changed, 51 insertions(+), 127 deletions(-)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 6d41592..7bf2f56 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -493,9 +493,9 @@ NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
 void
 NineBaseTexture9_Dump( struct NineBaseTexture9 *This )
 {
-DBG(\nNineBaseTexture9(%p-%p/%p): Pool=%s Type=%s Usage=%s\n
+DBG(\nNineBaseTexture9(%p-NULL/%p): Pool=%s Type=%s Usage=%s\n
 Format=%s Dims=%ux%ux%u/%u LastLevel=%u Lod=%u(%u)\n, This,
-This-base.resource, This-base.data,
+This-base.resource,
 nine_D3DPOOL_to_str(This-base.pool),
 nine_D3DRTYPE_to_str(This-base.type),
 nine_D3DUSAGE_to_str(This-base.usage),
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 4f63162..5ef09f7 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -102,7 +102,7 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 sfdesc.Width = sfdesc.Height = u_minify(EdgeLength, i / 6);
 
 hr = NineSurface9_new(This-base.base.base.device, NineUnknown(This),
-  This-base.base.resource, D3DRTYPE_CUBETEXTURE,
+  This-base.base.resource, NULL, 
D3DRTYPE_CUBETEXTURE,
   i / 6, i % 6,
   sfdesc, This-surfaces[i]);
 if (FAILED(hr))
diff --git a/src/gallium/state_trackers/nine/resource9.c 
b/src/gallium/state_trackers/nine/resource9.c
index c82180b..6bdc1d0 100644
--- a/src/gallium/state_trackers/nine/resource9.c
+++ b/src/gallium/state_trackers/nine/resource9.c
@@ -63,7 +63,6 @@ NineResource9_ctor( struct NineResource9 *This,
 return D3DERR_OUTOFVIDEOMEMORY;
 }
 
-This-data = NULL; /* FIXME remove, rather set it to null in surface9.c*/
 This-type = Type;
 This-pool = Pool;
 This-usage = Usage;
@@ -88,10 +87,6 @@ NineResource9_dtor( struct NineResource9 *This )
  * still hold a reference. */
 pipe_resource_reference(This-resource, NULL);
 
-/* release allocated system memory for non-D3DPOOL_DEFAULT resources */
-if (This-data)
-FREE(This-data);
-
 NineUnknown_dtor(This-base);
 }
 
diff --git a/src/gallium/state_trackers/nine/resource9.h 
b/src/gallium/state_trackers/nine/resource9.h
index d18f0cf..da1dd63 100644
--- a/src/gallium/state_trackers/nine/resource9.h
+++ b/src/gallium/state_trackers/nine/resource9.h
@@ -36,8 +36,6 @@ struct NineResource9
 
 struct pipe_resource *resource; /* device resource */
 
-uint8_t *data; /* system memory backing */
-
 D3DRESOURCETYPE type;
 D3DPOOL pool;
 DWORD priority;
diff --git a/src/gallium/state_trackers/nine/surface9.c 
b/src/gallium/state_trackers/nine/surface9.c
index 94b4d07..aa79112 100644
--- a/src/gallium/state_trackers/nine/surface9.c
+++ b/src/gallium/state_trackers/nine/surface9.c
@@ -43,6 +43,7 @@ NineSurface9_ctor( struct NineSurface9 *This,
struct NineUnknownParams *pParams,
struct NineUnknown *pContainer,
struct pipe_resource *pResource,
+   void *user_buffer,
uint8_t TextureType,
unsigned Level,
unsigned Layer,
@@ -62,6 +63,8 @@ NineSurface9_ctor( struct NineSurface9 *This,
 assert(pResource ||
pDesc-Pool != D3DPOOL_DEFAULT || pDesc-Format == D3DFMT_NULL);
 
+assert(!pResource || !user_buffer);
+
 This-base.info.screen = pParams-device-screen;
 This-base.info.target = PIPE_TEXTURE_2D;
 This-base.info.format = d3d9_to_pipe_format(pDesc-Format);
@@ -82,9 +85,8 @@ NineSurface9_ctor( struct NineSurface9 *This,
 
 if (pDesc-Pool == D3DPOOL_SYSTEMMEM

[Mesa-dev] [PATCH v3 07/19] st/nine: return GetAvailableTextureMem in bytes as expected (v2)

2014-11-24 Thread David Heidelberg
PIPE_CAP_VIDEO_MEMORY returns the amount of video memory in megabytes,
so need to converted it to bytes.

Fixed Warframe memory detection.

v2: also prepare for cards with more than 4GB memory

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: Yaroslav Andrusyak pontost...@gmail.com
Reviewed-by: Ilia Mirkin imir...@alum.mit.edu
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/device9.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index 66d5e66..d48f47d 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -423,7 +423,11 @@ NineDevice9_TestCooperativeLevel( struct NineDevice9 *This 
)
 UINT WINAPI
 NineDevice9_GetAvailableTextureMem( struct NineDevice9 *This )
 {
-return This-screen-get_param(This-screen, PIPE_CAP_VIDEO_MEMORY);
+   const unsigned mem = This-screen-get_param(This-screen, 
PIPE_CAP_VIDEO_MEMORY);
+   if (mem  4096)
+  return mem  20;
+   else
+  return UINT_MAX;
 }
 
 HRESULT WINAPI
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 09/19] st/nine: remove unused pipe_viewport_state::translate[3] and scale[3]

2014-11-24 Thread David Heidelberg
2efabd9f5a711a7f6cd1846630244b7814bf25b3 removed them as unused.

This caused random memory overwrites (reported by Coverity).

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: Ilia Mirkin imir...@alum.mit.edu
Reviewed-by: Marek Olšák marek.ol...@amd.com
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/nine_state.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 6924449..37de6a3 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -141,11 +141,9 @@ update_viewport(struct NineDevice9 *device)
 pvport.scale[0] = (float)vport-Width * 0.5f;
 pvport.scale[1] = (float)vport-Height * -0.5f;
 pvport.scale[2] = vport-MaxZ - vport-MinZ;
-pvport.scale[3] = 1.0f;
 pvport.translate[0] = (float)vport-Width * 0.5f + (float)vport-X;
 pvport.translate[1] = (float)vport-Height * 0.5f + (float)vport-Y;
 pvport.translate[2] = vport-MinZ;
-pvport.translate[3] = 0.0f;
 
 pipe-set_viewport_states(pipe, 0, 1, pvport);
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 08/19] st/nine: fix wrong variable reset

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Error detected by Coverity (COPY_PASTE_ERROR)

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: Ilia Mirkin imir...@alum.mit.edu
Signed-off-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/nine_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 0215d08..6924449 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -400,7 +400,7 @@ update_constants(struct NineDevice9 *device, unsigned 
shader_type)
 const_i = device-state.ps_const_i[0][0];
 
 dirty_b = device-state.changed.ps_const_b;
-device-state.changed.vs_const_b = 0;
+device-state.changed.ps_const_b = 0;
 const_b = device-state.ps_const_b;
 b_true = device-ps_bool_true;
 
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 13/19] st/nine: fix formatting in query9 (cosmetic)

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 761f02e..fbe4ae7 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -168,15 +168,15 @@ NineQuery9_Issue( struct NineQuery9 *This,
 
 if (dwIssueFlags == D3DISSUE_BEGIN) {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
-   pipe-end_query(pipe, This-pq);
-   }
+pipe-end_query(pipe, This-pq);
+}
 pipe-begin_query(pipe, This-pq);
 This-state = NINE_QUERY_STATE_RUNNING;
 } else {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
 pipe-end_query(pipe, This-pq);
 This-state = NINE_QUERY_STATE_ENDED;
-   }
+}
 }
 return D3D_OK;
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 14/19] st/nine: Use gallium caps to get if queries are supported.

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Some queries need the driver to advertise a cap to be supported.
For example r300 doesn't support them.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c |  2 +-
 src/gallium/state_trackers/nine/query9.c  | 43 +++
 src/gallium/state_trackers/nine/query9.h  |  2 +-
 3 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index c16f728..e9599b8 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -3359,7 +3359,7 @@ NineDevice9_CreateQuery( struct NineDevice9 *This,
 
 DBG(This=%p Type=%d ppQuery=%p\n, This, Type, ppQuery);
 
-hr = nine_is_query_supported(Type);
+hr = nine_is_query_supported(This-screen, Type);
 if (!ppQuery || hr != D3D_OK)
 return hr;
 
diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index fbe4ae7..8a2957a 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -23,34 +23,33 @@
 #include device9.h
 #include query9.h
 #include nine_helpers.h
+#include pipe/p_screen.h
 #include pipe/p_context.h
 #include util/u_math.h
 #include nine_dump.h
 
 #define DBG_CHANNEL DBG_QUERY
 
-#define QUERY_TYPE_MAP_CASE(a, b) case D3DQUERYTYPE_##a: return PIPE_QUERY_##b
 static inline unsigned
-d3dquerytype_to_pipe_query(D3DQUERYTYPE type)
+d3dquerytype_to_pipe_query(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
 switch (type) {
-QUERY_TYPE_MAP_CASE(EVENT, GPU_FINISHED);
-QUERY_TYPE_MAP_CASE(OCCLUSION, OCCLUSION_COUNTER);
-QUERY_TYPE_MAP_CASE(TIMESTAMP, TIMESTAMP);
-QUERY_TYPE_MAP_CASE(TIMESTAMPDISJOINT, TIMESTAMP_DISJOINT);
-QUERY_TYPE_MAP_CASE(TIMESTAMPFREQ, TIMESTAMP_DISJOINT);
-QUERY_TYPE_MAP_CASE(VERTEXSTATS, PIPELINE_STATISTICS);
-case D3DQUERYTYPE_VCACHE:
-case D3DQUERYTYPE_RESOURCEMANAGER:
-case D3DQUERYTYPE_PIPELINETIMINGS:
-case D3DQUERYTYPE_INTERFACETIMINGS:
-case D3DQUERYTYPE_VERTEXTIMINGS:
-case D3DQUERYTYPE_PIXELTIMINGS:
-case D3DQUERYTYPE_BANDWIDTHTIMINGS:
-case D3DQUERYTYPE_CACHEUTILIZATION:
-   return PIPE_QUERY_TYPES;
-default:
-return ~0;
+case D3DQUERYTYPE_EVENT:
+return PIPE_QUERY_GPU_FINISHED;
+case D3DQUERYTYPE_OCCLUSION:
+return screen-get_param(screen, PIPE_CAP_OCCLUSION_QUERY) ?
+   PIPE_QUERY_OCCLUSION_COUNTER : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_TIMESTAMP:
+return screen-get_param(screen, PIPE_CAP_QUERY_TIMESTAMP) ?
+   PIPE_QUERY_TIMESTAMP : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_TIMESTAMPDISJOINT:
+case D3DQUERYTYPE_TIMESTAMPFREQ:
+return screen-get_param(screen, PIPE_CAP_QUERY_TIMESTAMP) ?
+   PIPE_QUERY_TIMESTAMP_DISJOINT : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_VERTEXSTATS:
+return PIPE_QUERY_PIPELINE_STATISTICS;
+default:
+return PIPE_QUERY_TYPES; /* Query not supported */
 }
 }
 
@@ -73,9 +72,9 @@ nine_query_result_size(D3DQUERYTYPE type)
 }
 
 HRESULT
-nine_is_query_supported(D3DQUERYTYPE type)
+nine_is_query_supported(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
-const unsigned ptype = d3dquerytype_to_pipe_query(type);
+const unsigned ptype = d3dquerytype_to_pipe_query(screen, type);
 
 user_assert(ptype != ~0, D3DERR_INVALIDCALL);
 
@@ -93,7 +92,7 @@ NineQuery9_ctor( struct NineQuery9 *This,
  D3DQUERYTYPE Type )
 {
 struct pipe_context *pipe = pParams-device-pipe;
-const unsigned ptype = d3dquerytype_to_pipe_query(Type);
+const unsigned ptype = d3dquerytype_to_pipe_query(pParams-device-screen, 
Type);
 HRESULT hr;
 
 DBG(This=%p pParams=%p Type=%d\n, This, pParams, Type);
diff --git a/src/gallium/state_trackers/nine/query9.h 
b/src/gallium/state_trackers/nine/query9.h
index f08393f..5c34264 100644
--- a/src/gallium/state_trackers/nine/query9.h
+++ b/src/gallium/state_trackers/nine/query9.h
@@ -49,7 +49,7 @@ NineQuery9( void *data )
 }
 
 HRESULT
-nine_is_query_supported(D3DQUERYTYPE);
+nine_is_query_supported(struct pipe_screen *screen, D3DQUERYTYPE);
 
 HRESULT
 NineQuery9_new( struct NineDevice9 *Device,
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 12/19] st/nine: if query needs flush, try again get_query_result after flush

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 18 ++
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index e44eb11..761f02e 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -196,7 +196,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DWORD dwGetDataFlags )
 {
 struct pipe_context *pipe = This-base.device-pipe;
-boolean ok;
+boolean ok, flush_if_needed;
 unsigned i;
 union pipe_query_result presult;
 union nine_query_result nresult;
@@ -212,16 +212,18 @@ NineQuery9_GetData( struct NineQuery9 *This,
 if (This-state == NINE_QUERY_STATE_FRESH)
 return S_OK;
 
+flush_if_needed = dwGetDataFlags 
+  This-state != NINE_QUERY_STATE_FLUSHED;
+
 ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
-if (!ok) {
-if (dwGetDataFlags) {
-if (This-state != NINE_QUERY_STATE_FLUSHED)
-pipe-flush(pipe, NULL, 0);
-This-state = NINE_QUERY_STATE_FLUSHED;
-}
-return S_FALSE;
+if (!ok  flush_if_needed) {
+pipe-flush(pipe, NULL, 0);
+ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
+This-state = NINE_QUERY_STATE_FLUSHED;
 }
 
+if (!ok) return S_FALSE;
+
 if (!dwSize)
 return S_OK;
 
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 11/19] st/nine: remove dummy queries

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Applications are supposed to call CreateQuery with a NULL
ppQuery to know if the query is supported. We supported that.

However when ppQuery was not NULL, we were accepting to create the
query and were creating a dummy query even when the query is not
supported.

Wine has different behaviour. This patch drops the dummy queries
support and matches wine behaviour.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c |   5 +-
 src/gallium/state_trackers/nine/query9.c  | 101 +++---
 2 files changed, 12 insertions(+), 94 deletions(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index d48f47d..c16f728 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -3359,8 +3359,9 @@ NineDevice9_CreateQuery( struct NineDevice9 *This,
 
 DBG(This=%p Type=%d ppQuery=%p\n, This, Type, ppQuery);
 
-if (!ppQuery)
-return nine_is_query_supported(Type);
+hr = nine_is_query_supported(Type);
+if (!ppQuery || hr != D3D_OK)
+return hr;
 
 hr = NineQuery9_new(This, query, Type);
 if (FAILED(hr))
diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 908420c..e44eb11 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -54,29 +54,18 @@ d3dquerytype_to_pipe_query(D3DQUERYTYPE type)
 }
 }
 
-#define GET_DATA_SIZE_CASE9(a)case D3DQUERYTYPE_##a: return 
sizeof(D3DDEVINFO_D3D9##a)
-#define GET_DATA_SIZE_CASE1(a)case D3DQUERYTYPE_##a: return 
sizeof(D3DDEVINFO_##a)
 #define GET_DATA_SIZE_CASE2(a, b) case D3DQUERYTYPE_##a: return 
sizeof(D3DDEVINFO_##b)
 #define GET_DATA_SIZE_CASET(a, b) case D3DQUERYTYPE_##a: return sizeof(b)
 static INLINE DWORD
 nine_query_result_size(D3DQUERYTYPE type)
 {
 switch (type) {
-GET_DATA_SIZE_CASE1(VCACHE);
-GET_DATA_SIZE_CASE1(RESOURCEMANAGER);
 GET_DATA_SIZE_CASE2(VERTEXSTATS, D3DVERTEXSTATS);
 GET_DATA_SIZE_CASET(EVENT, BOOL);
 GET_DATA_SIZE_CASET(OCCLUSION, DWORD);
 GET_DATA_SIZE_CASET(TIMESTAMP, UINT64);
 GET_DATA_SIZE_CASET(TIMESTAMPDISJOINT, BOOL);
 GET_DATA_SIZE_CASET(TIMESTAMPFREQ, UINT64);
-GET_DATA_SIZE_CASE9(PIPELINETIMINGS);
-GET_DATA_SIZE_CASE9(INTERFACETIMINGS);
-GET_DATA_SIZE_CASE2(VERTEXTIMINGS, D3D9STAGETIMINGS);
-GET_DATA_SIZE_CASE2(PIXELTIMINGS, D3D9STAGETIMINGS);
-GET_DATA_SIZE_CASE9(BANDWIDTHTIMINGS);
-GET_DATA_SIZE_CASE9(CACHEUTILIZATION);
-/* GET_DATA_SIZE_CASE1(MEMORYPRESSURE); Win7 only */
 default:
 assert(0);
 return 0;
@@ -123,8 +112,7 @@ NineQuery9_ctor( struct NineQuery9 *This,
 if (!This-pq)
 return E_OUTOFMEMORY;
 } else {
-DBG(Returning dummy NineQuery9 for %s.\n,
-nine_D3DQUERYTYPE_to_str(Type));
+assert(0); /* we have checked this case before */
 }
 
 This-instant =
@@ -178,11 +166,6 @@ NineQuery9_Issue( struct NineQuery9 *This,
 (dwIssueFlags == 0) ||
 (dwIssueFlags == D3DISSUE_END), D3DERR_INVALIDCALL);
 
-if (!This-pq) {
-DBG(Issued dummy query.\n);
-return D3D_OK;
-}
-
 if (dwIssueFlags == D3DISSUE_BEGIN) {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
pipe-end_query(pipe, This-pq);
@@ -201,13 +184,6 @@ NineQuery9_Issue( struct NineQuery9 *This,
 union nine_query_result
 {
 D3DDEVINFO_D3DVERTEXSTATS vertexstats;
-D3DDEVINFO_D3D9BANDWIDTHTIMINGS bandwidth;
-D3DDEVINFO_VCACHE vcache;
-D3DDEVINFO_RESOURCEMANAGER rm;
-D3DDEVINFO_D3D9PIPELINETIMINGS pipe;
-D3DDEVINFO_D3D9STAGETIMINGS stage;
-D3DDEVINFO_D3D9INTERFACETIMINGS iface;
-D3DDEVINFO_D3D9CACHEUTILIZATION cacheu;
 DWORD dw;
 BOOL b;
 UINT64 u64;
@@ -220,7 +196,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DWORD dwGetDataFlags )
 {
 struct pipe_context *pipe = This-base.device-pipe;
-boolean ok = !This-pq;
+boolean ok;
 unsigned i;
 union pipe_query_result presult;
 union nine_query_result nresult;
@@ -233,25 +209,19 @@ NineQuery9_GetData( struct NineQuery9 *This,
 user_assert(dwGetDataFlags == 0 ||
 dwGetDataFlags == D3DGETDATA_FLUSH, D3DERR_INVALIDCALL);
 
-if (!This-pq) {
-DBG(No pipe query available.\n);
-if (!dwSize)
-   return S_OK;
-}
 if (This-state == NINE_QUERY_STATE_FRESH)
 return S_OK;
 
+ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
 if (!ok) {
-ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
-if (!ok) {
-if (dwGetDataFlags) {
-if (This-state != NINE_QUERY_STATE_FLUSHED)
-pipe-flush(pipe, NULL, 0

[Mesa-dev] [PATCH v3 17/19] st/nine: Queries: allow app to call GetData without Issuing first

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Nine was allowing that behaviour, but was not filling the result.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index e174586..04ad3db 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -197,7 +197,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DWORD dwGetDataFlags )
 {
 struct pipe_context *pipe = This-base.device-pipe;
-boolean ok, flush_if_needed;
+boolean ok, flush_if_needed, wait_query_result = FALSE;
 unsigned i;
 union pipe_query_result presult;
 union nine_query_result nresult;
@@ -213,8 +213,14 @@ NineQuery9_GetData( struct NineQuery9 *This,
 user_assert(dwGetDataFlags == 0 ||
 dwGetDataFlags == D3DGETDATA_FLUSH, D3DERR_INVALIDCALL);
 
-if (This-state == NINE_QUERY_STATE_FRESH)
-return S_OK;
+if (This-state == NINE_QUERY_STATE_FRESH) {
+/* App forgot calling Issue. call it for it.
+ * However Wine states that return value should
+ * be S_OK, so wait for the result to return S_OK. */
+NineQuery9_Issue(This, D3DISSUE_END);
+dwGetDataFlags = D3DGETDATA_FLUSH; /* flush if needed */
+wait_query_result = TRUE;
+}
 
 flush_if_needed = dwGetDataFlags 
   This-state != NINE_QUERY_STATE_FLUSHED;
@@ -222,7 +228,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
 if (!ok  flush_if_needed) {
 pipe-flush(pipe, NULL, 0);
-ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
+ok = pipe-get_query_result(pipe, This-pq, wait_query_result, 
presult);
 This-state = NINE_QUERY_STATE_FLUSHED;
 }
 
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 15/19] st/nine: return S_FALSE instead of INVALIDCALL when in building query state

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

It is the same behaviour as wine has.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 8a2957a..38841e6 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -203,7 +203,10 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DBG(This=%p pData=%p dwSize=%d dwGetDataFlags=%d\n,
 This, pData, dwSize, dwGetDataFlags);
 
-user_assert(This-state != NINE_QUERY_STATE_RUNNING, D3DERR_INVALIDCALL);
+/* according to spec we should return D3DERR_INVALIDCALL here, but
+ * wine returns S_FALSE because it is apparently the behaviour
+ * on windows */
+user_assert(This-state != NINE_QUERY_STATE_RUNNING, S_FALSE);
 user_assert(dwSize == 0 || pData, D3DERR_INVALIDCALL);
 user_assert(dwGetDataFlags == 0 ||
 dwGetDataFlags == D3DGETDATA_FLUSH, D3DERR_INVALIDCALL);
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 16/19] st/nine: Queries: Fix D3DISSUE_END behaviour.

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Issuing D3DISSUE_END should:
. reset previous queries if possible
. end the query

Previous behaviour wasn't calling end_query for
queries not needing D3DISSUE_BEGIN, no resetting
previous queries.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 38841e6..e174586 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -172,10 +172,12 @@ NineQuery9_Issue( struct NineQuery9 *This,
 pipe-begin_query(pipe, This-pq);
 This-state = NINE_QUERY_STATE_RUNNING;
 } else {
-if (This-state == NINE_QUERY_STATE_RUNNING) {
-pipe-end_query(pipe, This-pq);
-This-state = NINE_QUERY_STATE_ENDED;
-}
+if (This-state != NINE_QUERY_STATE_RUNNING 
+This-type != D3DQUERYTYPE_EVENT 
+This-type != D3DQUERYTYPE_TIMESTAMP)
+pipe-begin_query(pipe, This-pq);
+pipe-end_query(pipe, This-pq);
+This-state = NINE_QUERY_STATE_ENDED;
 }
 return D3D_OK;
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 19/19] st/nine: Queries: Always return D3D_OK when issuing with D3DISSUE_BEGIN

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

This is the behaviour that wine tests.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 15564f6..9b06e82 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -161,10 +161,15 @@ NineQuery9_Issue( struct NineQuery9 *This,
 
 DBG(This=%p dwIssueFlags=%d\n, This, dwIssueFlags);
 
-user_assert((dwIssueFlags == D3DISSUE_BEGIN  !This-instant) ||
+user_assert((dwIssueFlags == D3DISSUE_BEGIN) ||
 (dwIssueFlags == 0) ||
 (dwIssueFlags == D3DISSUE_END), D3DERR_INVALIDCALL);
 
+/* Wine tests: always return D3D_OK on D3DISSUE_BEGIN
+ * even when the call is supposed to be forbidden */
+if (dwIssueFlags == D3DISSUE_BEGIN  This-instant)
+return D3D_OK;
+
 if (dwIssueFlags == D3DISSUE_BEGIN) {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
 pipe-end_query(pipe, This-pq);
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 18/19] st/nine: Queries: always succeed for D3DQUERYTYPE_TIMESTAMP when flushing

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

This is the behaviour that Wine tests

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 04ad3db..15564f6 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -228,6 +228,9 @@ NineQuery9_GetData( struct NineQuery9 *This,
 ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
 if (!ok  flush_if_needed) {
 pipe-flush(pipe, NULL, 0);
+/* Wine tests: D3DQUERYTYPE_TIMESTAMP always succeeds
+ * directly when flushed */
+wait_query_result |= This-type == D3DQUERYTYPE_TIMESTAMP;
 ok = pipe-get_query_result(pipe, This-pq, wait_query_result, 
presult);
 This-state = NINE_QUERY_STATE_FLUSHED;
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3] st/nine: Use gallium caps to get if queries are supported. (v2)

2014-11-24 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Some queries need the driver to advertise a cap to be supported.
For example r300 doesn't support them.

v2 (David): check also for PIPE_CAP_QUERY_PIPELINE_STATISTICS, fix wine
tests on r300g

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c |  2 +-
 src/gallium/state_trackers/nine/query9.c  | 45 ---
 src/gallium/state_trackers/nine/query9.h  |  2 +-
 3 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index c16f728..e9599b8 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -3359,7 +3359,7 @@ NineDevice9_CreateQuery( struct NineDevice9 *This,
 
 DBG(This=%p Type=%d ppQuery=%p\n, This, Type, ppQuery);
 
-hr = nine_is_query_supported(Type);
+hr = nine_is_query_supported(This-screen, Type);
 if (!ppQuery || hr != D3D_OK)
 return hr;
 
diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index fbe4ae7..3571e78 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -23,34 +23,35 @@
 #include device9.h
 #include query9.h
 #include nine_helpers.h
+#include pipe/p_screen.h
 #include pipe/p_context.h
 #include util/u_math.h
 #include nine_dump.h
 
 #define DBG_CHANNEL DBG_QUERY
 
-#define QUERY_TYPE_MAP_CASE(a, b) case D3DQUERYTYPE_##a: return PIPE_QUERY_##b
 static inline unsigned
-d3dquerytype_to_pipe_query(D3DQUERYTYPE type)
+d3dquerytype_to_pipe_query(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
 switch (type) {
-QUERY_TYPE_MAP_CASE(EVENT, GPU_FINISHED);
-QUERY_TYPE_MAP_CASE(OCCLUSION, OCCLUSION_COUNTER);
-QUERY_TYPE_MAP_CASE(TIMESTAMP, TIMESTAMP);
-QUERY_TYPE_MAP_CASE(TIMESTAMPDISJOINT, TIMESTAMP_DISJOINT);
-QUERY_TYPE_MAP_CASE(TIMESTAMPFREQ, TIMESTAMP_DISJOINT);
-QUERY_TYPE_MAP_CASE(VERTEXSTATS, PIPELINE_STATISTICS);
-case D3DQUERYTYPE_VCACHE:
-case D3DQUERYTYPE_RESOURCEMANAGER:
-case D3DQUERYTYPE_PIPELINETIMINGS:
-case D3DQUERYTYPE_INTERFACETIMINGS:
-case D3DQUERYTYPE_VERTEXTIMINGS:
-case D3DQUERYTYPE_PIXELTIMINGS:
-case D3DQUERYTYPE_BANDWIDTHTIMINGS:
-case D3DQUERYTYPE_CACHEUTILIZATION:
-   return PIPE_QUERY_TYPES;
-default:
-return ~0;
+case D3DQUERYTYPE_EVENT:
+return PIPE_QUERY_GPU_FINISHED;
+case D3DQUERYTYPE_OCCLUSION:
+return screen-get_param(screen, PIPE_CAP_OCCLUSION_QUERY) ?
+   PIPE_QUERY_OCCLUSION_COUNTER : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_TIMESTAMP:
+return screen-get_param(screen, PIPE_CAP_QUERY_TIMESTAMP) ?
+   PIPE_QUERY_TIMESTAMP : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_TIMESTAMPDISJOINT:
+case D3DQUERYTYPE_TIMESTAMPFREQ:
+return screen-get_param(screen, PIPE_CAP_QUERY_TIMESTAMP) ?
+   PIPE_QUERY_TIMESTAMP_DISJOINT : PIPE_QUERY_TYPES;
+case D3DQUERYTYPE_VERTEXSTATS:
+return screen-get_param(screen,
+PIPE_CAP_QUERY_PIPELINE_STATISTICS) ?
+   PIPE_QUERY_PIPELINE_STATISTICS : PIPE_QUERY_TYPES;
+default:
+return PIPE_QUERY_TYPES; /* Query not supported */
 }
 }
 
@@ -73,9 +74,9 @@ nine_query_result_size(D3DQUERYTYPE type)
 }
 
 HRESULT
-nine_is_query_supported(D3DQUERYTYPE type)
+nine_is_query_supported(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
-const unsigned ptype = d3dquerytype_to_pipe_query(type);
+const unsigned ptype = d3dquerytype_to_pipe_query(screen, type);
 
 user_assert(ptype != ~0, D3DERR_INVALIDCALL);
 
@@ -93,7 +94,7 @@ NineQuery9_ctor( struct NineQuery9 *This,
  D3DQUERYTYPE Type )
 {
 struct pipe_context *pipe = pParams-device-pipe;
-const unsigned ptype = d3dquerytype_to_pipe_query(Type);
+const unsigned ptype = d3dquerytype_to_pipe_query(pParams-device-screen, 
Type);
 HRESULT hr;
 
 DBG(This=%p pParams=%p Type=%d\n, This, pParams, Type);
diff --git a/src/gallium/state_trackers/nine/query9.h 
b/src/gallium/state_trackers/nine/query9.h
index f08393f..5c34264 100644
--- a/src/gallium/state_trackers/nine/query9.h
+++ b/src/gallium/state_trackers/nine/query9.h
@@ -49,7 +49,7 @@ NineQuery9( void *data )
 }
 
 HRESULT
-nine_is_query_supported(D3DQUERYTYPE);
+nine_is_query_supported(struct pipe_screen *screen, D3DQUERYTYPE);
 
 HRESULT
 NineQuery9_new( struct NineDevice9 *Device,
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 03/11] st/nine: propertly declare constants

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Fixes Error : CONST[20]: Undeclared source register when running
dx9_alpha_blending_material. Also artifacts on ilo.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/nine_ff.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index 6890933..f2dbae4 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -189,10 +189,10 @@ static void nine_ureg_tgsi_dump(struct ureg_program 
*ureg, boolean override)
 
 /* AL should contain base address of lights table. */
 #define LIGHT_CONST(i)\
-ureg_src_indirect(ureg_src_register(TGSI_FILE_CONSTANT, (i)), _X(AL))
+ureg_src_indirect(ureg_DECL_constant(ureg, i), _X(AL))
 
 #define MATERIAL_CONST(i) \
-ureg_src_register(TGSI_FILE_CONSTANT, 19 + (i))
+ureg_DECL_constant(ureg, 19 + (i))
 
 #define MISC_CONST(i) \
 ureg_src_register(TGSI_FILE_CONSTANT, (i))
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 04/11] st/nine: Add pool check to SetTexture (v2)

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

D3DPOOL_SCRATCH is disallowed according to spec.
D3DPOOL_SYSTEMMEM should be allowed but we don't handle it right for now.

v2: Fixes segfault in SetTexture when unsetting the texture

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c | 10 +-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index e083536..66d5e66 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -2199,6 +2199,7 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 IDirect3DBaseTexture9 *pTexture )
 {
 struct nine_state *state = This-update;
+struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 
 DBG(This=%p Stage=%u pTexture=%p\n, This, Stage, pTexture);
 
@@ -2206,12 +2207,19 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 Stage == D3DDMAPSAMPLER ||
 (Stage = D3DVERTEXTEXTURESAMPLER0 
  Stage = D3DVERTEXTEXTURESAMPLER3), D3DERR_INVALIDCALL);
+user_assert(!tex || tex-base.pool != D3DPOOL_SCRATCH, D3DERR_INVALIDCALL);
+
+if (unlikely(tex  tex-base.pool == D3DPOOL_SYSTEMMEM)) {
+/* TODO: Currently not implemented. Better return error
+ * with message telling what's wrong */
+ERR(This=%p D3DPOOL_SYSTEMMEM not implemented for SetTexture\n, 
This);
+user_assert(tex-base.pool != D3DPOOL_SYSTEMMEM, D3DERR_INVALIDCALL);
+}
 
 if (Stage = D3DDMAPSAMPLER)
 Stage = Stage - D3DDMAPSAMPLER + NINE_MAX_SAMPLERS_PS;
 
 if (!This-is_recording) {
-struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 struct NineBaseTexture9 *old = state-texture[Stage];
 if (old == tex)
 return D3D_OK;
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] nine: the .pc file should not follow mesa version

2014-11-23 Thread David Heidelberg

Reviewed-by: David Heidelberg da...@ixit.cz

On 11/22/2014 05:23 AM, Emil Velikov wrote:

The version provided by it should be the same as the one
provided/handled by the module. Add the missing tiny version.

Cc: mesa-sta...@lists.freedesktop.org
Signed-off-by: Emil Velikov emil.l.veli...@gmail.com
---
  configure.ac| 2 ++
  src/gallium/targets/d3dadapter9/Makefile.am | 2 +-
  src/gallium/targets/d3dadapter9/d3d.pc.in   | 2 +-
  3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 33cbf22..f99ea3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2085,6 +2085,8 @@ AM_CONDITIONAL(HAVE_SPARC_ASM, test x$asm_arch = xsparc)
  
  AC_SUBST([NINE_MAJOR], 1)

  AC_SUBST([NINE_MINOR], 0)
+AC_SUBST([NINE_TINY], 0)
+AC_SUBST([NINE_VERSION], $NINE_MAJOR.$NINE_MINOR.$NINE_TINY)
  
  AC_SUBST([VDPAU_MAJOR], 1)

  AC_SUBST([VDPAU_MINOR], 0)
diff --git a/src/gallium/targets/d3dadapter9/Makefile.am 
b/src/gallium/targets/d3dadapter9/Makefile.am
index 6231236..dc97931 100644
--- a/src/gallium/targets/d3dadapter9/Makefile.am
+++ b/src/gallium/targets/d3dadapter9/Makefile.am
@@ -62,7 +62,7 @@ d3dadapter9_la_LDFLAGS = \
-shrext .so \
-module \
-no-undefined \
-   -version-number $(NINE_MAJOR):$(NINE_MINOR) \
+   -version-number $(NINE_MAJOR):$(NINE_MINOR):$(NINE_TINY) \
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
  
diff --git a/src/gallium/targets/d3dadapter9/d3d.pc.in b/src/gallium/targets/d3dadapter9/d3d.pc.in

index 9a18a5c..d34b2a7 100644
--- a/src/gallium/targets/d3dadapter9/d3d.pc.in
+++ b/src/gallium/targets/d3dadapter9/d3d.pc.in
@@ -6,6 +6,6 @@ moduledir=@D3D_DRIVER_INSTALL_DIR@
  
  Name: d3d

  Description: Native D3D driver modules
-Version: @VERSION@
+Version: @NINE_VERSION@
  Requires.private: @DRI_PC_REQ_PRIV@
  Cflags: -I${includedir}


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 08/11] st/nine: Fix setting of the shift modifier in nine_shader

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

It is an sint_4, but it was stored in a uint_8...
The code using it was acting as if it was signed.

Problem found thanks to Coverity

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/nine_shader.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_shader.c 
b/src/gallium/state_trackers/nine/nine_shader.c
index cc027b4..7d5622b 100644
--- a/src/gallium/state_trackers/nine/nine_shader.c
+++ b/src/gallium/state_trackers/nine/nine_shader.c
@@ -239,7 +239,7 @@ struct sm1_dst_param
 BYTE file;
 BYTE mask;
 BYTE mod;
-BYTE shift; /* sint4 */
+int8_t shift; /* sint4 */
 BYTE type;
 };
 
@@ -2535,6 +2535,7 @@ sm1_parse_get_param(struct shader_translator *tx, DWORD 
*reg, DWORD *rel)
 static void
 sm1_parse_dst_param(struct sm1_dst_param *dst, DWORD tok)
 {
+uint8_t shift;
 dst-file =
 (tok  D3DSP_REGTYPE_MASK)   D3DSP_REGTYPE_SHIFT |
 (tok  D3DSP_REGTYPE_MASK2)  D3DSP_REGTYPE_SHIFT2;
@@ -2543,7 +2544,8 @@ sm1_parse_dst_param(struct sm1_dst_param *dst, DWORD tok)
 dst-rel = NULL;
 dst-mask = (tok  NINED3DSP_WRITEMASK_MASK)  NINED3DSP_WRITEMASK_SHIFT;
 dst-mod = (tok  D3DSP_DSTMOD_MASK)  D3DSP_DSTMOD_SHIFT;
-dst-shift = (tok  D3DSP_DSTSHIFT_MASK)  D3DSP_DSTSHIFT_SHIFT;
+shift = (tok  D3DSP_DSTSHIFT_MASK)  D3DSP_DSTSHIFT_SHIFT;
+dst-shift = (shift  0x8) ? -(shift  0x7) : shift  0x7;
 }
 
 static void
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 01/11] st/nine: Refactor Resource9 BaseTexture9 Surface9 and Texture9 initialization

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

First change is to pass initResource argument to initialise the resource
field in Resource9 instead of in the parents.

Second change is to pass Usage argument, instead of letting the parent
classes set the usage field of the Resource9 structure.

Third change fixes a bug, preventing Half-Life 2 Lost Coast from working
properly, is to remove the data field from Resource9, put it in Surface9,
which was the only user, and add flag to Surface9 to know if it has created
the data or not. Surface9 dtor frees the data only if it created it.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/adapter9.c   |   2 +-
 src/gallium/state_trackers/nine/basetexture9.c   |  23 +++--
 src/gallium/state_trackers/nine/basetexture9.h   |   5 +-
 src/gallium/state_trackers/nine/cubetexture9.c   |   9 +-
 src/gallium/state_trackers/nine/device9.c|  19 ++--
 src/gallium/state_trackers/nine/device9.h|   7 +-
 src/gallium/state_trackers/nine/device9ex.c  |   6 +-
 src/gallium/state_trackers/nine/indexbuffer9.c   |   4 +-
 src/gallium/state_trackers/nine/resource9.c  |  13 +--
 src/gallium/state_trackers/nine/resource9.h  |   6 +-
 src/gallium/state_trackers/nine/surface9.c   | 112 ++-
 src/gallium/state_trackers/nine/surface9.h   |   7 +-
 src/gallium/state_trackers/nine/swapchain9.c |   6 +-
 src/gallium/state_trackers/nine/texture9.c   |  51 ---
 src/gallium/state_trackers/nine/vertexbuffer9.c  |   4 +-
 src/gallium/state_trackers/nine/volumetexture9.c |   7 +-
 16 files changed, 106 insertions(+), 175 deletions(-)

diff --git a/src/gallium/state_trackers/nine/adapter9.c 
b/src/gallium/state_trackers/nine/adapter9.c
index 8d574de..e409d5f 100644
--- a/src/gallium/state_trackers/nine/adapter9.c
+++ b/src/gallium/state_trackers/nine/adapter9.c
@@ -990,7 +990,7 @@ NineAdapter9_CreateDevice( struct NineAdapter9 *This,
 params.BehaviorFlags = BehaviorFlags;
 
 hr = NineDevice9_new(screen, params, caps, pPresentationParameters,
- pD3D9, pPresentationGroup, This-ctx,
+ pD3D9, pPresentationGroup, This-ctx, FALSE, NULL,
  (struct NineDevice9 **)ppReturnedDeviceInterface);
 if (FAILED(hr)) {
 DBG(Failed to create device.\n);
diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 89f6269..7bf2f56 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -41,25 +41,28 @@
 HRESULT
 NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
struct NineUnknownParams *pParams,
+   struct pipe_resource *initResource,
D3DRESOURCETYPE Type,
-   D3DPOOL Pool )
+   D3DFORMAT format,
+   D3DPOOL Pool,
+   DWORD Usage)
 {
-BOOL alloc = (Pool == D3DPOOL_DEFAULT)  !This-base.resource 
-(This-format != D3DFMT_NULL);
+BOOL alloc = (Pool == D3DPOOL_DEFAULT)  !initResource 
+(format != D3DFMT_NULL);
 HRESULT hr;
-DWORD usage = This-base.usage;
 
-user_assert(!(usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
+user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
 Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
-user_assert(!(usage  D3DUSAGE_DYNAMIC) ||
+user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
 Pool != D3DPOOL_MANAGED, D3DERR_INVALIDCALL);
 
-hr = NineResource9_ctor(This-base, pParams, alloc, Type, Pool);
+hr = NineResource9_ctor(This-base, pParams, initResource, alloc, Type, 
Pool, Usage);
 if (FAILED(hr))
 return hr;
 
+This-format = format;
 This-pipe = pParams-device-pipe;
-This-mipfilter = (This-base.usage  D3DUSAGE_AUTOGENMIPMAP) ?
+This-mipfilter = (Usage  D3DUSAGE_AUTOGENMIPMAP) ?
 D3DTEXF_LINEAR : D3DTEXF_NONE;
 This-lod = 0;
 This-lod_resident = -1;
@@ -490,9 +493,9 @@ NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
 void
 NineBaseTexture9_Dump( struct NineBaseTexture9 *This )
 {
-DBG(\nNineBaseTexture9(%p-%p/%p): Pool=%s Type=%s Usage=%s\n
+DBG(\nNineBaseTexture9(%p-NULL/%p): Pool=%s Type=%s Usage=%s\n
 Format=%s Dims=%ux%ux%u/%u LastLevel=%u Lod=%u(%u)\n, This,
-This-base.resource, This-base.data,
+This-base.resource,
 nine_D3DPOOL_to_str(This-base.pool),
 nine_D3DRTYPE_to_str(This-base.type),
 nine_D3DUSAGE_to_str(This-base.usage),
diff --git a/src/gallium/state_trackers/nine/basetexture9.h 
b/src/gallium/state_trackers/nine/basetexture9.h
index d615376..0062771 100644
--- a/src/gallium/state_trackers/nine/basetexture9.h
+++ b/src/gallium/state_trackers

[Mesa-dev] [PATCH 02/11] st/nine: call DBG() at more external entry points

2014-11-23 Thread David Heidelberg
From: Stanislaw Halik stha...@misaki.pl

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: Stanislaw Halik stha...@misaki.pl
---
 src/gallium/state_trackers/nine/basetexture9.c | 17 
 src/gallium/state_trackers/nine/cubetexture9.c | 17 
 src/gallium/state_trackers/nine/device9.c  | 46 ++
 src/gallium/state_trackers/nine/device9ex.c| 15 +++
 src/gallium/state_trackers/nine/iunknown.c |  2 +
 src/gallium/state_trackers/nine/pixelshader9.c |  4 ++
 src/gallium/state_trackers/nine/query9.c   |  7 
 src/gallium/state_trackers/nine/resource9.c| 11 ++
 src/gallium/state_trackers/nine/stateblock9.c  |  3 ++
 src/gallium/state_trackers/nine/surface9.c |  7 
 src/gallium/state_trackers/nine/swapchain9.c   |  5 +++
 src/gallium/state_trackers/nine/swapchain9ex.c |  4 ++
 src/gallium/state_trackers/nine/texture9.c |  5 +++
 .../state_trackers/nine/vertexdeclaration9.c   |  5 +++
 src/gallium/state_trackers/nine/vertexshader9.c|  3 ++
 src/gallium/state_trackers/nine/volume9.c  |  8 
 src/gallium/state_trackers/nine/volumetexture9.c   | 12 ++
 17 files changed, 171 insertions(+)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 7bf2f56..12da1e0 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -51,6 +51,9 @@ NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
 (format != D3DFMT_NULL);
 HRESULT hr;
 
+DBG(This=%p, pParams=%p initResource=%p Type=%d format=%d Pool=%d 
Usage=%d\n,
+This, pParams, initResource, Type, format, Pool, Usage);
+
 user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
 Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
 user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
@@ -93,6 +96,8 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 {
 DWORD old = This-lod;
 
+DBG(This=%p LODNew=%d\n, This, LODNew);
+
 user_assert(This-base.pool == D3DPOOL_MANAGED, 0);
 
 This-lod = MIN2(LODNew, This-base.info.last_level);
@@ -106,12 +111,16 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 DWORD WINAPI
 NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-lod;
 }
 
 DWORD WINAPI
 NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-base.usage  D3DUSAGE_AUTOGENMIPMAP)
 return 1;
 return This-base.info.last_level + 1;
@@ -121,6 +130,8 @@ HRESULT WINAPI
 NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
D3DTEXTUREFILTERTYPE FilterType )
 {
+DBG(This=%p FilterType=%d\n, This, FilterType);
+
 if (!(This-base.usage  D3DUSAGE_AUTOGENMIPMAP))
 return D3D_OK;
 user_assert(FilterType != D3DTEXF_NONE, D3DERR_INVALIDCALL);
@@ -133,6 +144,8 @@ NineBaseTexture9_SetAutoGenFilterType( struct 
NineBaseTexture9 *This,
 D3DTEXTUREFILTERTYPE WINAPI
 NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-mipfilter;
 }
 
@@ -433,6 +446,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 struct pipe_sampler_view templ;
 uint8_t swizzle[4];
 
+DBG(This=%p sRGB=%d\n, This, sRGB);
+
 if (unlikely(!resource)) {
if (unlikely(This-format == D3DFMT_NULL))
 return D3D_OK;
@@ -485,6 +500,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 void WINAPI
 NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-dirty  This-base.pool == D3DPOOL_MANAGED)
 NineBaseTexture9_UploadSelf(This);
 }
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 5ef09f7..9f5d8e2 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -42,6 +42,11 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 D3DSURFACE_DESC sfdesc;
 HRESULT hr;
 
+DBG(This=%p pParams=%p EdgeLength=%u Levels=%u Usage=%d 
+Format=%d Pool=%d pSharedHandle=%p\n,
+This, pParams, EdgeLength, Levels, Usage,
+Format, Pool, pSharedHandle);
+
 user_assert(!(Usage  D3DUSAGE_AUTOGENMIPMAP) ||
 (Pool != D3DPOOL_SYSTEMMEM  Levels = 1), 
D3DERR_INVALIDCALL);
 
@@ -135,6 +140,8 @@ NineCubeTexture9_GetLevelDesc( struct NineCubeTexture9 
*This,
UINT Level,
D3DSURFACE_DESC *pDesc )
 {
+DBG(This=%p Level=%u pDesc=%p\n, This, Level, pDesc);
+
 user_assert(Level = This-base.base.info.last_level

[Mesa-dev] [PATCH 06/11] st/nine: fix wrong variable reset

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Error detected by Coverity (COPY_PAST_ERROR)

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Signed-off-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/nine_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 0215d08..6924449 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -400,7 +400,7 @@ update_constants(struct NineDevice9 *device, unsigned 
shader_type)
 const_i = device-state.ps_const_i[0][0];
 
 dirty_b = device-state.changed.ps_const_b;
-device-state.changed.vs_const_b = 0;
+device-state.changed.ps_const_b = 0;
 const_b = device-state.ps_const_b;
 b_true = device-ps_bool_true;
 
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 07/11] st/nine: remove unused pipe_viewport_state::translate[3] and scale[3]

2014-11-23 Thread David Heidelberg
2efabd9f5a711a7f6cd1846630244b7814bf25b3 removed them as unused.

This caused random memory overwrites (reported by Coverity).

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: Marek Olšák marek.ol...@amd.com
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/nine_state.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 6924449..37de6a3 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -141,11 +141,9 @@ update_viewport(struct NineDevice9 *device)
 pvport.scale[0] = (float)vport-Width * 0.5f;
 pvport.scale[1] = (float)vport-Height * -0.5f;
 pvport.scale[2] = vport-MaxZ - vport-MinZ;
-pvport.scale[3] = 1.0f;
 pvport.translate[0] = (float)vport-Width * 0.5f + (float)vport-X;
 pvport.translate[1] = (float)vport-Height * 0.5f + (float)vport-Y;
 pvport.translate[2] = vport-MinZ;
-pvport.translate[3] = 0.0f;
 
 pipe-set_viewport_states(pipe, 0, 1, pvport);
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 11/11] st/nine: return S_FALSE instead of INVALIDCALL when in building query state

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

It is the same behaviour as wine has.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index f32f572..c244379 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -255,7 +255,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DBG(This=%p pData=%p dwSize=%d dwGetDataFlags=%d\n,
 This, pData, dwSize, dwGetDataFlags);
 
-user_assert(This-state != NINE_QUERY_STATE_RUNNING, D3DERR_INVALIDCALL);
+user_assert(This-state != NINE_QUERY_STATE_RUNNING, S_FALSE);
 user_assert(dwSize == 0 || pData, D3DERR_INVALIDCALL);
 user_assert(dwGetDataFlags == 0 ||
 dwGetDataFlags == D3DGETDATA_FLUSH, D3DERR_INVALIDCALL);
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 10/11] st/nine: Handle queries not supported by the driver

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c |  2 +-
 src/gallium/state_trackers/nine/query9.c  | 52 ---
 src/gallium/state_trackers/nine/query9.h  |  2 +-
 3 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index d48f47d..f723294 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -3360,7 +3360,7 @@ NineDevice9_CreateQuery( struct NineDevice9 *This,
 DBG(This=%p Type=%d ppQuery=%p\n, This, Type, ppQuery);
 
 if (!ppQuery)
-return nine_is_query_supported(Type);
+return nine_is_query_supported(This-screen, Type);
 
 hr = NineQuery9_new(This, query, Type);
 if (FAILED(hr))
diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 34dfec7..f32f572 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -23,16 +23,27 @@
 #include device9.h
 #include query9.h
 #include nine_helpers.h
+#include pipe/p_screen.h
 #include pipe/p_context.h
 #include util/u_math.h
+#include os/os_time.h
 #include nine_dump.h
 
 #define DBG_CHANNEL DBG_QUERY
 
 #define QUERY_TYPE_MAP_CASE(a, b) case D3DQUERYTYPE_##a: return PIPE_QUERY_##b
 static inline unsigned
-d3dquerytype_to_pipe_query(D3DQUERYTYPE type)
+d3dquerytype_to_pipe_query(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
+if ((type == D3DQUERYTYPE_OCCLUSION 
+!screen-get_param(screen, PIPE_CAP_OCCLUSION_QUERY)) ||
+((type == D3DQUERYTYPE_TIMESTAMP || type == D3DQUERYTYPE_TIMESTAMPFREQ 
||
+type == D3DQUERYTYPE_TIMESTAMPDISJOINT)
+!screen-get_param(screen, PIPE_CAP_QUERY_TIMESTAMP)) ||
+(type == D3DQUERYTYPE_VERTEXSTATS 
+!screen-get_param(screen, PIPE_CAP_QUERY_PIPELINE_STATISTICS)))
+return PIPE_QUERY_TYPES;
+
 switch (type) {
 QUERY_TYPE_MAP_CASE(EVENT, GPU_FINISHED);
 QUERY_TYPE_MAP_CASE(OCCLUSION, OCCLUSION_COUNTER);
@@ -84,9 +95,9 @@ nine_query_result_size(D3DQUERYTYPE type)
 }
 
 HRESULT
-nine_is_query_supported(D3DQUERYTYPE type)
+nine_is_query_supported(struct pipe_screen *screen, D3DQUERYTYPE type)
 {
-const unsigned ptype = d3dquerytype_to_pipe_query(type);
+const unsigned ptype = d3dquerytype_to_pipe_query(screen, type);
 
 user_assert(ptype != ~0, D3DERR_INVALIDCALL);
 
@@ -104,7 +115,7 @@ NineQuery9_ctor( struct NineQuery9 *This,
  D3DQUERYTYPE Type )
 {
 struct pipe_context *pipe = pParams-device-pipe;
-const unsigned ptype = d3dquerytype_to_pipe_query(Type);
+const unsigned ptype = d3dquerytype_to_pipe_query(pParams-device-screen, 
Type);
 HRESULT hr;
 
 DBG(This=%p pParams=%p Type=%d\n, This, pParams, Type);
@@ -282,22 +293,39 @@ NineQuery9_GetData( struct NineQuery9 *This,
 nresult.b = presult.b;
 break;
 case D3DQUERYTYPE_OCCLUSION:
-nresult.dw = presult.u64;
+if (This-pq)
+nresult.dw = presult.u64;
+else
+nresult.dw = 0;
 break;
 case D3DQUERYTYPE_TIMESTAMP:
-nresult.u64 = presult.u64;
+if (This-pq)
+nresult.u64 = presult.u64;
+else
+nresult.u64 = os_time_get_nano();
 break;
 case D3DQUERYTYPE_TIMESTAMPDISJOINT:
-nresult.b = presult.timestamp_disjoint.disjoint;
+if (This-pq)
+nresult.b = presult.timestamp_disjoint.disjoint;
+else
+nresult.b = FALSE;
 break;
 case D3DQUERYTYPE_TIMESTAMPFREQ:
-nresult.u64 = presult.timestamp_disjoint.frequency;
+if (This-pq)
+nresult.u64 = presult.timestamp_disjoint.frequency;
+else
+nresult.u64 = 1; /* dummy value */
 break;
 case D3DQUERYTYPE_VERTEXSTATS:
-nresult.vertexstats.NumRenderedTriangles =
-presult.pipeline_statistics.c_invocations;
-nresult.vertexstats.NumExtraClippingTriangles =
-presult.pipeline_statistics.c_primitives;
+if (This-pq) {
+nresult.vertexstats.NumRenderedTriangles =
+presult.pipeline_statistics.c_invocations;
+nresult.vertexstats.NumExtraClippingTriangles =
+presult.pipeline_statistics.c_primitives;
+} else {
+nresult.vertexstats.NumRenderedTriangles = 1;
+nresult.vertexstats.NumExtraClippingTriangles = 0;
+}
 break;
 /* Thse might be doable with driver-specific queries; dummy for now. */
 case D3DQUERYTYPE_BANDWIDTHTIMINGS:
diff --git a/src/gallium/state_trackers/nine/query9.h 
b/src/gallium/state_trackers/nine/query9.h
index f08393f..5c34264 100644
--- a/src/gallium/state_trackers/nine/query9.h
+++ 

[Mesa-dev] [PATCH 09/11] st/nine: Rework queries

2014-11-23 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

From this moment we should handle errors same way as Wine does.

Original patch from John Ettedgui john.etted...@gmail.com

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/query9.c | 66 +---
 1 file changed, 44 insertions(+), 22 deletions(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 908420c..34dfec7 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -123,6 +123,15 @@ NineQuery9_ctor( struct NineQuery9 *This,
 if (!This-pq)
 return E_OUTOFMEMORY;
 } else {
+/* we have a fallback when app create a query that is
+   not supported. Wine has different behaviour. It won't fill the
+   pointer with a valid NineQuery9, but let it NULL and return error.
+   However even if driver doesn't support D3DQUERYTYPE_EVENT, it
+   will say it is supported and have a fallback for it. Since we
+   support more queries than wine we may hit different rendering paths
+   than it, so perhaps these fallbacks are required.
+   TODO: someone with a lot of different games should try to see
+   if these dummy queries are needed. */
 DBG(Returning dummy NineQuery9 for %s.\n,
 nine_D3DQUERYTYPE_to_str(Type));
 }
@@ -174,10 +183,15 @@ NineQuery9_Issue( struct NineQuery9 *This,
 
 DBG(This=%p dwIssueFlags=%d\n, This, dwIssueFlags);
 
-user_assert((dwIssueFlags == D3DISSUE_BEGIN  !This-instant) ||
+user_assert((dwIssueFlags == D3DISSUE_BEGIN) ||
 (dwIssueFlags == 0) ||
 (dwIssueFlags == D3DISSUE_END), D3DERR_INVALIDCALL);
 
+/* Wine tests: always return D3D_OK on D3DISSUE_BEGIN
+ * even when the call is supposed to be forbidden */
+if (dwIssueFlags == D3DISSUE_BEGIN  This-instant)
+return D3D_OK;
+
 if (!This-pq) {
 DBG(Issued dummy query.\n);
 return D3D_OK;
@@ -185,15 +199,17 @@ NineQuery9_Issue( struct NineQuery9 *This,
 
 if (dwIssueFlags == D3DISSUE_BEGIN) {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
-   pipe-end_query(pipe, This-pq);
-   }
+pipe-end_query(pipe, This-pq);
+}
 pipe-begin_query(pipe, This-pq);
 This-state = NINE_QUERY_STATE_RUNNING;
 } else {
-if (This-state == NINE_QUERY_STATE_RUNNING) {
-pipe-end_query(pipe, This-pq);
-This-state = NINE_QUERY_STATE_ENDED;
-   }
+if (This-state != NINE_QUERY_STATE_RUNNING 
+This-type != D3DQUERYTYPE_EVENT 
+This-type != D3DQUERYTYPE_TIMESTAMP)
+pipe-begin_query(pipe, This-pq);
+pipe-end_query(pipe, This-pq);
+This-state = NINE_QUERY_STATE_ENDED;
 }
 return D3D_OK;
 }
@@ -220,7 +236,7 @@ NineQuery9_GetData( struct NineQuery9 *This,
 DWORD dwGetDataFlags )
 {
 struct pipe_context *pipe = This-base.device-pipe;
-boolean ok = !This-pq;
+boolean ok, should_flush, should_wait;
 unsigned i;
 union pipe_query_result presult;
 union nine_query_result nresult;
@@ -235,22 +251,28 @@ NineQuery9_GetData( struct NineQuery9 *This,
 
 if (!This-pq) {
 DBG(No pipe query available.\n);
-if (!dwSize)
-   return S_OK;
-}
-if (This-state == NINE_QUERY_STATE_FRESH)
-return S_OK;
+} else {
+should_flush = dwGetDataFlags  This-state != 
NINE_QUERY_STATE_FLUSHED;
+/* Wine tests: D3DQUERYTYPE_TIMESTAMP always succeeds
+ * directly when flushed */
+should_wait = dwGetDataFlags  This-type == D3DQUERYTYPE_TIMESTAMP;
+
+if (This-state == NINE_QUERY_STATE_FRESH) {
+/* App forgot issue the request. Be nice and issue it. */
+(void) NineQuery9_Issue(This, D3DISSUE_END);
+/* Wine tests: we have to succeed. */
+should_flush = TRUE;
+should_wait = TRUE;
+}
 
-if (!ok) {
-ok = pipe-get_query_result(pipe, This-pq, FALSE, presult);
-if (!ok) {
-if (dwGetDataFlags) {
-if (This-state != NINE_QUERY_STATE_FLUSHED)
-pipe-flush(pipe, NULL, 0);
-This-state = NINE_QUERY_STATE_FLUSHED;
-}
-return S_FALSE;
+if (should_flush) {
+pipe-flush(pipe, NULL, 0);
+This-state = NINE_QUERY_STATE_FLUSHED;
 }
+
+ok = pipe-get_query_result(pipe, This-pq, should_wait, presult);
+if (!ok)
+return S_FALSE;
 }
 if (!dwSize)
 return S_OK;
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/3] nine: Don't use the otherwise-dead SFL opcode in an unreachable path.

2014-11-21 Thread David Heidelberg

Reviewed-by: David Heidelberg da...@ixit.cz

for the series.

David
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 3/4] nine: handle D3DISSUE_END without previous D3DISSUE_BEGIN

2014-11-21 Thread David Heidelberg
From: John Ettedgui john.etted...@gmail.com

This patch fixes black screen with games based on the Unreal Engine 3.
It was tested that it fixed the issue in Tera Online, Borderlands 2 and 
Homefront.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: Axel Davy axel.d...@ens.fr
Reviewed-by: David Heidelberg da...@ixit.cz
Signed-off-by: John Ettedgui john.etted...@gmail.com
---
 src/gallium/state_trackers/nine/query9.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/query9.c 
b/src/gallium/state_trackers/nine/query9.c
index 86762d2..5006d9f 100644
--- a/src/gallium/state_trackers/nine/query9.c
+++ b/src/gallium/state_trackers/nine/query9.c
@@ -188,8 +188,8 @@ NineQuery9_Issue( struct NineQuery9 *This,
 } else {
 if (This-state == NINE_QUERY_STATE_RUNNING) {
 pipe-end_query(pipe, This-pq);
-This-state = NINE_QUERY_STATE_ENDED;
}
+   This-state = NINE_QUERY_STATE_ENDED;
 }
 return D3D_OK;
 }
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 2/4] nine: Add pool check to SetTexture (v2)

2014-11-21 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

D3DPOOL_SCRATCH is disallowed according to spec.
D3DPOOL_SYSTEMMEM should be allowed but we don't handle it right for now.

v2: Fixes segfault in SetTexture when unsetting the texture

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/device9.c | 10 +-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/device9.c 
b/src/gallium/state_trackers/nine/device9.c
index 5f95b42..db410a1 100644
--- a/src/gallium/state_trackers/nine/device9.c
+++ b/src/gallium/state_trackers/nine/device9.c
@@ -2172,6 +2172,7 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 IDirect3DBaseTexture9 *pTexture )
 {
 struct nine_state *state = This-update;
+struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 
 DBG(This=%p Stage=%u pTexture=%p\n, This, Stage, pTexture);
 
@@ -2179,12 +2180,19 @@ NineDevice9_SetTexture( struct NineDevice9 *This,
 Stage == D3DDMAPSAMPLER ||
 (Stage = D3DVERTEXTEXTURESAMPLER0 
  Stage = D3DVERTEXTEXTURESAMPLER3), D3DERR_INVALIDCALL);
+user_assert(!tex || tex-base.pool != D3DPOOL_SCRATCH, D3DERR_INVALIDCALL);
+
+if (unlikely(tex  tex-base.pool == D3DPOOL_SYSTEMMEM)) {
+/* TODO: Currently not implemented. Better return error
+ * with message telling what's wrong */
+ERR(This=%p D3DPOOL_SYSTEMMEM not implemented for SetTexture\n, 
This);
+user_assert(tex-base.pool != D3DPOOL_SYSTEMMEM, D3DERR_INVALIDCALL);
+}
 
 if (Stage = D3DDMAPSAMPLER)
 Stage = Stage - D3DDMAPSAMPLER + NINE_MAX_SAMPLERS_PS;
 
 if (!This-is_recording) {
-struct NineBaseTexture9 *tex = NineBaseTexture9(pTexture);
 struct NineBaseTexture9 *old = state-texture[Stage];
 if (old == tex)
 return D3D_OK;
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 4/4] nine: call DBG() at more external entry points

2014-11-21 Thread David Heidelberg
From: Stanislaw Halik stha...@misaki.pl

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: Stanislaw Halik stha...@misaki.pl
---
 src/gallium/state_trackers/nine/basetexture9.c | 17 
 src/gallium/state_trackers/nine/cubetexture9.c | 17 
 src/gallium/state_trackers/nine/device9.c  | 46 ++
 src/gallium/state_trackers/nine/device9ex.c| 15 +++
 src/gallium/state_trackers/nine/iunknown.c |  2 +
 src/gallium/state_trackers/nine/pixelshader9.c |  4 ++
 src/gallium/state_trackers/nine/query9.c   |  7 
 src/gallium/state_trackers/nine/resource9.c| 11 ++
 src/gallium/state_trackers/nine/stateblock9.c  |  3 ++
 src/gallium/state_trackers/nine/surface9.c |  7 
 src/gallium/state_trackers/nine/swapchain9.c   |  5 +++
 src/gallium/state_trackers/nine/swapchain9ex.c |  4 ++
 src/gallium/state_trackers/nine/texture9.c |  5 +++
 .../state_trackers/nine/vertexdeclaration9.c   |  5 +++
 src/gallium/state_trackers/nine/vertexshader9.c|  3 ++
 src/gallium/state_trackers/nine/volume9.c  |  8 
 src/gallium/state_trackers/nine/volumetexture9.c   | 12 ++
 17 files changed, 171 insertions(+)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 7bf2f56..12da1e0 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -51,6 +51,9 @@ NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
 (format != D3DFMT_NULL);
 HRESULT hr;
 
+DBG(This=%p, pParams=%p initResource=%p Type=%d format=%d Pool=%d 
Usage=%d\n,
+This, pParams, initResource, Type, format, Pool, Usage);
+
 user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
 Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
 user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
@@ -93,6 +96,8 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 {
 DWORD old = This-lod;
 
+DBG(This=%p LODNew=%d\n, This, LODNew);
+
 user_assert(This-base.pool == D3DPOOL_MANAGED, 0);
 
 This-lod = MIN2(LODNew, This-base.info.last_level);
@@ -106,12 +111,16 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
 DWORD WINAPI
 NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-lod;
 }
 
 DWORD WINAPI
 NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-base.usage  D3DUSAGE_AUTOGENMIPMAP)
 return 1;
 return This-base.info.last_level + 1;
@@ -121,6 +130,8 @@ HRESULT WINAPI
 NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
D3DTEXTUREFILTERTYPE FilterType )
 {
+DBG(This=%p FilterType=%d\n, This, FilterType);
+
 if (!(This-base.usage  D3DUSAGE_AUTOGENMIPMAP))
 return D3D_OK;
 user_assert(FilterType != D3DTEXF_NONE, D3DERR_INVALIDCALL);
@@ -133,6 +144,8 @@ NineBaseTexture9_SetAutoGenFilterType( struct 
NineBaseTexture9 *This,
 D3DTEXTUREFILTERTYPE WINAPI
 NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 return This-mipfilter;
 }
 
@@ -433,6 +446,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 struct pipe_sampler_view templ;
 uint8_t swizzle[4];
 
+DBG(This=%p sRGB=%d\n, This, sRGB);
+
 if (unlikely(!resource)) {
if (unlikely(This-format == D3DFMT_NULL))
 return D3D_OK;
@@ -485,6 +500,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
 void WINAPI
 NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
 {
+DBG(This=%p\n, This);
+
 if (This-dirty  This-base.pool == D3DPOOL_MANAGED)
 NineBaseTexture9_UploadSelf(This);
 }
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 5ef09f7..9f5d8e2 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -42,6 +42,11 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
 D3DSURFACE_DESC sfdesc;
 HRESULT hr;
 
+DBG(This=%p pParams=%p EdgeLength=%u Levels=%u Usage=%d 
+Format=%d Pool=%d pSharedHandle=%p\n,
+This, pParams, EdgeLength, Levels, Usage,
+Format, Pool, pSharedHandle);
+
 user_assert(!(Usage  D3DUSAGE_AUTOGENMIPMAP) ||
 (Pool != D3DPOOL_SYSTEMMEM  Levels = 1), 
D3DERR_INVALIDCALL);
 
@@ -135,6 +140,8 @@ NineCubeTexture9_GetLevelDesc( struct NineCubeTexture9 
*This,
UINT Level,
D3DSURFACE_DESC *pDesc )
 {
+DBG(This=%p Level=%u pDesc=%p\n, This, Level, pDesc);
+
 user_assert(Level = This-base.base.info.last_level

[Mesa-dev] [PATCH 1/4] nine: propertly declare constants

2014-11-21 Thread David Heidelberg
From: Axel Davy axel.d...@ens.fr

Fixes Error : CONST[20]: Undeclared source register when running
dx9_alpha_blending_material. Also artifacts on ilo.

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Tested-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/nine_ff.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index 6890933..f2dbae4 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -189,10 +189,10 @@ static void nine_ureg_tgsi_dump(struct ureg_program 
*ureg, boolean override)
 
 /* AL should contain base address of lights table. */
 #define LIGHT_CONST(i)\
-ureg_src_indirect(ureg_src_register(TGSI_FILE_CONSTANT, (i)), _X(AL))
+ureg_src_indirect(ureg_DECL_constant(ureg, i), _X(AL))
 
 #define MATERIAL_CONST(i) \
-ureg_src_register(TGSI_FILE_CONSTANT, 19 + (i))
+ureg_DECL_constant(ureg, 19 + (i))
 
 #define MISC_CONST(i) \
 ureg_src_register(TGSI_FILE_CONSTANT, (i))
-- 
2.1.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 4/4] nine: call DBG() at more external entry points

2014-11-21 Thread David Heidelberg

Sorry, for now please without this patch.

This one needs  nine: Refactor Resource9 BaseTexture9 Surface9 and 
Texture9 initialization, which isn't part of batch.


Thanks, David.

On 11/22/2014 04:14 AM, David Heidelberg wrote:

From: Stanislaw Halik stha...@misaki.pl

Cc: 10.4 mesa-sta...@lists.freedesktop.org
Reviewed-by: David Heidelberg da...@ixit.cz
Reviewed-by: Axel Davy axel.d...@ens.fr
Signed-off-by: Stanislaw Halik stha...@misaki.pl
---
  src/gallium/state_trackers/nine/basetexture9.c | 17 
  src/gallium/state_trackers/nine/cubetexture9.c | 17 
  src/gallium/state_trackers/nine/device9.c  | 46 ++
  src/gallium/state_trackers/nine/device9ex.c| 15 +++
  src/gallium/state_trackers/nine/iunknown.c |  2 +
  src/gallium/state_trackers/nine/pixelshader9.c |  4 ++
  src/gallium/state_trackers/nine/query9.c   |  7 
  src/gallium/state_trackers/nine/resource9.c| 11 ++
  src/gallium/state_trackers/nine/stateblock9.c  |  3 ++
  src/gallium/state_trackers/nine/surface9.c |  7 
  src/gallium/state_trackers/nine/swapchain9.c   |  5 +++
  src/gallium/state_trackers/nine/swapchain9ex.c |  4 ++
  src/gallium/state_trackers/nine/texture9.c |  5 +++
  .../state_trackers/nine/vertexdeclaration9.c   |  5 +++
  src/gallium/state_trackers/nine/vertexshader9.c|  3 ++
  src/gallium/state_trackers/nine/volume9.c  |  8 
  src/gallium/state_trackers/nine/volumetexture9.c   | 12 ++
  17 files changed, 171 insertions(+)

diff --git a/src/gallium/state_trackers/nine/basetexture9.c 
b/src/gallium/state_trackers/nine/basetexture9.c
index 7bf2f56..12da1e0 100644
--- a/src/gallium/state_trackers/nine/basetexture9.c
+++ b/src/gallium/state_trackers/nine/basetexture9.c
@@ -51,6 +51,9 @@ NineBaseTexture9_ctor( struct NineBaseTexture9 *This,
  (format != D3DFMT_NULL);
  HRESULT hr;
  
+DBG(This=%p, pParams=%p initResource=%p Type=%d format=%d Pool=%d Usage=%d\n,

+This, pParams, initResource, Type, format, Pool, Usage);
+
  user_assert(!(Usage  (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) ||
  Pool == D3DPOOL_DEFAULT, D3DERR_INVALIDCALL);
  user_assert(!(Usage  D3DUSAGE_DYNAMIC) ||
@@ -93,6 +96,8 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
  {
  DWORD old = This-lod;
  
+DBG(This=%p LODNew=%d\n, This, LODNew);

+
  user_assert(This-base.pool == D3DPOOL_MANAGED, 0);
  
  This-lod = MIN2(LODNew, This-base.info.last_level);

@@ -106,12 +111,16 @@ NineBaseTexture9_SetLOD( struct NineBaseTexture9 *This,
  DWORD WINAPI
  NineBaseTexture9_GetLOD( struct NineBaseTexture9 *This )
  {
+DBG(This=%p\n, This);
+
  return This-lod;
  }
  
  DWORD WINAPI

  NineBaseTexture9_GetLevelCount( struct NineBaseTexture9 *This )
  {
+DBG(This=%p\n, This);
+
  if (This-base.usage  D3DUSAGE_AUTOGENMIPMAP)
  return 1;
  return This-base.info.last_level + 1;
@@ -121,6 +130,8 @@ HRESULT WINAPI
  NineBaseTexture9_SetAutoGenFilterType( struct NineBaseTexture9 *This,
 D3DTEXTUREFILTERTYPE FilterType )
  {
+DBG(This=%p FilterType=%d\n, This, FilterType);
+
  if (!(This-base.usage  D3DUSAGE_AUTOGENMIPMAP))
  return D3D_OK;
  user_assert(FilterType != D3DTEXF_NONE, D3DERR_INVALIDCALL);
@@ -133,6 +144,8 @@ NineBaseTexture9_SetAutoGenFilterType( struct 
NineBaseTexture9 *This,
  D3DTEXTUREFILTERTYPE WINAPI
  NineBaseTexture9_GetAutoGenFilterType( struct NineBaseTexture9 *This )
  {
+DBG(This=%p\n, This);
+
  return This-mipfilter;
  }
  
@@ -433,6 +446,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 *This,

  struct pipe_sampler_view templ;
  uint8_t swizzle[4];
  
+DBG(This=%p sRGB=%d\n, This, sRGB);

+
  if (unlikely(!resource)) {
if (unlikely(This-format == D3DFMT_NULL))
  return D3D_OK;
@@ -485,6 +500,8 @@ NineBaseTexture9_UpdateSamplerView( struct NineBaseTexture9 
*This,
  void WINAPI
  NineBaseTexture9_PreLoad( struct NineBaseTexture9 *This )
  {
+DBG(This=%p\n, This);
+
  if (This-dirty  This-base.pool == D3DPOOL_MANAGED)
  NineBaseTexture9_UploadSelf(This);
  }
diff --git a/src/gallium/state_trackers/nine/cubetexture9.c 
b/src/gallium/state_trackers/nine/cubetexture9.c
index 5ef09f7..9f5d8e2 100644
--- a/src/gallium/state_trackers/nine/cubetexture9.c
+++ b/src/gallium/state_trackers/nine/cubetexture9.c
@@ -42,6 +42,11 @@ NineCubeTexture9_ctor( struct NineCubeTexture9 *This,
  D3DSURFACE_DESC sfdesc;
  HRESULT hr;
  
+DBG(This=%p pParams=%p EdgeLength=%u Levels=%u Usage=%d 

+Format=%d Pool=%d pSharedHandle=%p\n,
+This, pParams, EdgeLength, Levels, Usage,
+Format, Pool, pSharedHandle);
+
  user_assert(!(Usage  D3DUSAGE_AUTOGENMIPMAP) ||
  (Pool != D3DPOOL_SYSTEMMEM  Levels = 1), 
D3DERR_INVALIDCALL

Re: [Mesa-dev] Removing unused opcodes (TGSI, Mesa IR)

2014-11-19 Thread David Heidelberg

 The patch attached should do it.

just small nitpick, please drop /* for radeons */ comment from DP2ADD, 
thanks


Reviewed-by: David Heidelberg da...@ixit.cz
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 2/2] Revert mesa: Wrap SSE4.1 code in #ifdef __SSE4_1__.

2014-11-15 Thread David Heidelberg

Apply for both patch 1/2 and 2/2.

Host: chroot on AMD A3870K
Target: AMD TK-55 (compiled with -mno-sse41)

I tested chroot cross-compilation and it passed correctly.

Tested-by: David Heidelberg da...@ixit.cz
On 11/15/2014 06:04 PM, Emil Velikov wrote:

This reverts commit 8d3f739383fbdf671752fdec707f1c2b9b2aa6a3.

In the last commit we've updated our check to determine if the actual
code is buildable, rather than if the compiler acknowledges the option.
I.e. did anyone provide -mno-sse4.1 vs is my compiler too old.

Now this code will never be attemped to be build, in both cases.

Confirmed by building mesa with
export CFLAGS='-march=native -mno-sse4.1'
configure  make

Cc: Matt Turner matts...@gmail.com
Cc: David Heidelberger da...@ixit.cz
---
  src/mesa/main/streaming-load-memcpy.c | 3 ---
  1 file changed, 3 deletions(-)

diff --git a/src/mesa/main/streaming-load-memcpy.c 
b/src/mesa/main/streaming-load-memcpy.c
index 8427149..d7147af 100644
--- a/src/mesa/main/streaming-load-memcpy.c
+++ b/src/mesa/main/streaming-load-memcpy.c
@@ -26,7 +26,6 @@
   *
   */
  
-#ifdef __SSE4_1__

  #include main/macros.h
  #include main/streaming-load-memcpy.h
  #include smmintrin.h
@@ -84,5 +83,3 @@ _mesa_streaming_load_memcpy(void *restrict dst, void 
*restrict src, size_t len)
memcpy(d, s, len);
 }
  }
-
-#endif


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v3 0/9] Gallium Nine

2014-11-14 Thread David Heidelberg
We plan make automatized tests based on apitrace (documented how to use 
it with wine just few days ago) of used games. Also we have wine tests.


About merging to wine, it needs more work to be done, but in generally, 
we have packages for wide range of distributions, inlucluding livecd etc.
Maintaining it out-of tree make us bisecting more difficult, so it would 
be really blessing to have it in upstream repository.


David


On 11/14/2014 04:21 PM, Ilia Mirkin wrote:

On Fri, Nov 14, 2014 at 9:14 AM, Emil Velikov emil.l.veli...@gmail.com wrote:

On 02/11/14 18:27, David Heidelberg wrote:

Hello everyone!

First I'd like thank you for great feedback.
Sending third Gallium Nine merge request. We reduced number of commits
to necessary minimum. I hope all proposed changes are incorporated in v3.

Thank you


Gents,

Can we get an acked-by/reviewed-by for this ? Would be a shame to
torture David to keep rebasing this for another three months.

To the best of my knowledge, wine has no intent on merging anything
related to nine/st. There are no tests, either. What's the path
forward for this project? I know it's a pain to maintain out of tree,
but that alone isn't a good reason to merge something.

   -ilia


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH v3 0/9] Gallium Nine

2014-11-14 Thread David Heidelberg

On 11/14/2014 04:31 PM, Henri Verbeet wrote:

On 14 November 2014 16:21, Ilia Mirkin imir...@alum.mit.edu wrote:

To the best of my knowledge, wine has no intent on merging anything
related to nine/st.


That's a bit broader than I'd put it, but yes, in it's current form
this is not something we'd merge.
At this moment we still improving wine tests compliance and catching 
bugs. We're ready to accept any ideas to make it better, which helps 
accepting into wine upstream.

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 15/15] draw: allow LLVM use on non-SSE2 X86 cpus

2014-11-03 Thread David Heidelberg


This patch remove workaround related to LLVM 2.7 bug.

Original bug has been closed as fixed in 2011.
At this moment gallium requires LLVM 3.3 (2013).

Original LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=6960

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/draw/draw_context.c | 15 +--
 1 file changed, 1 insertion(+), 14 deletions(-)


diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index b0f4ca2..37b6c5d 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -53,20 +53,7 @@
 boolean
 draw_get_option_use_llvm(void)
 {
-   static boolean first = TRUE;
-   static boolean value;
-   if (first) {
-  first = FALSE;
-  value = debug_get_bool_option(DRAW_USE_LLVM, TRUE);
-
-#ifdef PIPE_ARCH_X86
-  util_cpu_detect();
-  /* require SSE2 due to LLVM PR6960. XXX Might be fixed by now? */
-  if (!util_cpu_caps.has_sse2)
- value = FALSE;
-#endif
-   }
-   return value;
+   return debug_get_bool_option(DRAW_USE_LLVM, TRUE);
 }
 #else
 boolean

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 0/9] Gallium Nine

2014-11-02 Thread David Heidelberg

Hello everyone!

First I'd like thank you for great feedback.
Sending third Gallium Nine merge request. We reduced number of commits 
to necessary minimum. I hope all proposed changes are incorporated in v3.


Thank you

Axel Davy (2):
  nine: Add drirc options (v2)
  nine: Implement threadpool

Christoph Bumiller (6):
  tgsi/ureg: add ureg_UARL shortcut (v2)
  winsys/sw/wrapper: implement is_displaytarget_format_supported for
swrast
  gallium/auxiliary: implement sw_probe_wrapped
  gallium/auxiliary: add inc and dec alternative with return (v2)
  gallium/auxiliary: add contained and rect checks (v3)
  gallium/auxiliary: add dump functions for bind and transfer flags

Joakim Sindholt (1):
  nine: Add state tracker nine for Direct3D9 (v2)

 configure.ac   |   26 +
 include/D3D9/d3d9.h| 1858 +++
 include/D3D9/d3d9caps.h|  387 +++
 include/D3D9/d3d9types.h   | 1797 ++
 include/d3dadapter/d3dadapter9.h   |  101 +
 include/d3dadapter/drm.h   |   44 +
 include/d3dadapter/present.h   |  137 +
 src/gallium/Makefile.am|4 +
 src/gallium/auxiliary/pipe-loader/pipe_loader.h|   11 +
 src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c |   22 +
 .../auxiliary/target-helpers/inline_sw_helper.h|   28 +
 src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h   |1 +
 src/gallium/auxiliary/util/u_atomic.h  |   78 +
 src/gallium/auxiliary/util/u_box.h |  230 ++
 src/gallium/auxiliary/util/u_dump.h|6 +
 src/gallium/auxiliary/util/u_dump_defines.c|   86 +
 src/gallium/auxiliary/util/u_rect.h|   28 +
 src/gallium/state_trackers/nine/Makefile.am|   13 +
 src/gallium/state_trackers/nine/Makefile.sources   |   73 +
 src/gallium/state_trackers/nine/README |   78 +
 src/gallium/state_trackers/nine/adapter9.c | 1081 ++
 src/gallium/state_trackers/nine/adapter9.h |  137 +
 .../state_trackers/nine/authenticatedchannel9.c|   78 +
 .../state_trackers/nine/authenticatedchannel9.h|   65 +
 src/gallium/state_trackers/nine/basetexture9.c |  504 +++
 src/gallium/state_trackers/nine/basetexture9.h |  138 +
 src/gallium/state_trackers/nine/cryptosession9.c   |  115 +
 src/gallium/state_trackers/nine/cryptosession9.h   |   86 +
 src/gallium/state_trackers/nine/cubetexture9.c |  274 ++
 src/gallium/state_trackers/nine/cubetexture9.h |   79 +
 src/gallium/state_trackers/nine/device9.c  | 3450 


 src/gallium/state_trackers/nine/device9.h  |  798 +
 src/gallium/state_trackers/nine/device9ex.c|  396 +++
 src/gallium/state_trackers/nine/device9ex.h|  148 +
 src/gallium/state_trackers/nine/device9video.c |   62 +
 src/gallium/state_trackers/nine/device9video.h |   57 +
 src/gallium/state_trackers/nine/guid.c |   66 +
 src/gallium/state_trackers/nine/guid.h |   36 +
 src/gallium/state_trackers/nine/indexbuffer9.c |  218 ++
 src/gallium/state_trackers/nine/indexbuffer9.h |   88 +
 src/gallium/state_trackers/nine/iunknown.c |  126 +
 src/gallium/state_trackers/nine/iunknown.h |  153 +
 src/gallium/state_trackers/nine/nine_debug.c   |  104 +
 src/gallium/state_trackers/nine/nine_debug.h   |  135 +
 src/gallium/state_trackers/nine/nine_defines.h |   55 +
 src/gallium/state_trackers/nine/nine_dump.c|  813 +
 src/gallium/state_trackers/nine/nine_dump.h|   52 +
 src/gallium/state_trackers/nine/nine_ff.c  | 2213 +
 src/gallium/state_trackers/nine/nine_ff.h  |   32 +
 src/gallium/state_trackers/nine/nine_helpers.c |  100 +
 src/gallium/state_trackers/nine/nine_helpers.h |  176 +
 src/gallium/state_trackers/nine/nine_lock.c| 3319 
+++

 src/gallium/state_trackers/nine/nine_lock.h|   51 +
 src/gallium/state_trackers/nine/nine_pdata.h   |   45 +
 src/gallium/state_trackers/nine/nine_pipe.c|  410 +++
 src/gallium/state_trackers/nine/nine_pipe.h|  568 
 src/gallium/state_trackers/nine/nine_quirk.c   |   49 +
 src/gallium/state_trackers/nine/nine_quirk.h   |   36 +
 src/gallium/state_trackers/nine/nine_shader.c  | 2959 
+

 src/gallium/state_trackers/nine/nine_shader.h  |  142 +
 src/gallium/state_trackers/nine/nine_state.c   | 1489 +
 src/gallium/state_trackers/nine/nine_state.h   |  234 ++
 .../state_trackers/nine/nineexoverlayextension.c   |   46 +
 .../state_trackers/nine/nineexoverlayextension.h   |   49 +
 src/gallium/state_trackers/nine/pixelshader9.c |  172 +
 src/gallium/state_trackers/nine/pixelshader9.h |   82 +
 src/gallium/state_trackers/nine/query9.c   |  358 ++
 

[Mesa-dev] [PATCH v3 1/9] tgsi/ureg: add ureg_UARL shortcut (v2)

2014-11-02 Thread David Heidelberg

v2: moved in in same order as in p_shader_tokens (thanks Brian)
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h 
b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h

index 7888be8..4ca4f24 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h
@@ -201,6 +201,7 @@ OP13_SAMPLE(GATHER4)
 OP12(SVIEWINFO)
 OP13(SAMPLE_POS)
 OP12(SAMPLE_INFO)
+OP11(UARL)
  OP13(UCMP)
 -- 2.1.3


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 2/9] winsys/sw/wrapper: implement is_displaytarget_format_supported for swrast

2014-11-02 Thread David Heidelberg

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c 
b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c

index e552ac2..a6bf498 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
@@ -85,6 +85,19 @@ wrapper_sw_displaytarget(struct sw_displaytarget *dt)
   static boolean
+wsw_is_dt_format_supported(struct sw_winsys *ws,
+   unsigned tex_usage,
+   enum pipe_format format)
+{
+   struct wrapper_sw_winsys *wsw = wrapper_sw_winsys(ws);
+
+   return wsw-screen-is_format_supported(wsw-screen, format,
+   PIPE_TEXTURE_2D, 0,
+   PIPE_BIND_RENDER_TARGET |
+   PIPE_BIND_DISPLAY_TARGET);
+}
+
+static boolean
 wsw_dt_get_stride(struct wrapper_sw_displaytarget *wdt, unsigned *stride)
 {
struct pipe_context *pipe = wdt-winsys-pipe;
@@ -276,6 +289,7 @@ wrapper_sw_winsys_wrap_pipe_screen(struct 
pipe_screen *screen)

if (!wsw)
   goto err;
 +   wsw-base.is_displaytarget_format_supported = 
wsw_is_dt_format_supported;

wsw-base.displaytarget_create = wsw_dt_create;
wsw-base.displaytarget_from_handle = wsw_dt_from_handle;
wsw-base.displaytarget_get_handle = wsw_dt_get_handle;
--
2.1.3


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 4/9] gallium/auxiliary: add inc and dec alternative with return (v2)

2014-11-02 Thread David Heidelberg

At this moment we use only zero or positive values.

v2: Implement it for also for Solaris, MSVC assembly
and enable for other combinations.

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/util/u_atomic.h | 78 
+++

 1 file changed, 78 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_atomic.h 
b/src/gallium/auxiliary/util/u_atomic.h

index 2f2b42b..f177b60 100644
--- a/src/gallium/auxiliary/util/u_atomic.h
+++ b/src/gallium/auxiliary/util/u_atomic.h
@@ -69,6 +69,18 @@ p_atomic_dec(int32_t *v)
 }
  static INLINE int32_t
+p_atomic_inc_return(int32_t *v)
+{
+   return __sync_add_and_fetch(v, 1);
+}
+
+static INLINE int32_t
+p_atomic_dec_return(int32_t *v)
+{
+   return __sync_sub_and_fetch(v, 1);
+}
+
+static INLINE int32_t
 p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 {
return __sync_val_compare_and_swap(v, old, _new);
@@ -116,6 +128,18 @@ p_atomic_dec(int32_t *v)
 }
  static INLINE int32_t
+p_atomic_inc_return(int32_t *v)
+{
+   return __sync_add_and_fetch(v, 1);
+}
+
+static INLINE int32_t
+p_atomic_dec_return(int32_t *v)
+{
+   return __sync_sub_and_fetch(v, 1);
+}
+
+static INLINE int32_t
 p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 {
return __sync_val_compare_and_swap(v, old, _new);
@@ -161,6 +185,18 @@ p_atomic_dec(int32_t *v)
 }
  static INLINE int32_t
+p_atomic_inc_return(int32_t *v)
+{
+   return __sync_add_and_fetch(v, 1);
+}
+
+static INLINE int32_t
+p_atomic_dec_return(int32_t *v)
+{
+   return __sync_sub_and_fetch(v, 1);
+}
+
+static INLINE int32_t
 p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 {
return __sync_val_compare_and_swap(v, old, _new);
@@ -186,6 +222,8 @@ p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 #define p_atomic_dec_zero(_v) ((boolean) --(*(_v)))
 #define p_atomic_inc(_v) ((void) (*(_v))++)
 #define p_atomic_dec(_v) ((void) (*(_v))--)
+#define p_atomic_inc_return(_v) ((*(_v))++)
+#define p_atomic_dec_return(_v) ((*(_v))--)
 #define p_atomic_cmpxchg(_v, old, _new) (*(_v) == old ? *(_v) = (_new) 
: *(_v))

  #endif
@@ -237,6 +275,32 @@ p_atomic_dec(int32_t *v)
 }
  static INLINE int32_t
+p_atomic_inc_return(int32_t *v)
+{
+   int32_t i;
+
+   __asm {
+  mov   eax, [v]
+  lock inc  dword ptr [eax]
+  mov   [i], eax
+   }
+   return i;
+}
+
+static INLINE int32_t
+p_atomic_dec_return(int32_t *v)
+{
+   int32_t i;
+
+   __asm {
+  mov   eax, [v]
+  lock dec  dword ptr [eax]
+  mov   [i], eax
+   }
+   return i;
+}
+
+static INLINE int32_t
 p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 {
int32_t orig;
@@ -288,6 +352,12 @@ p_atomic_inc(int32_t *v)
_InterlockedIncrement((long *)v);
 }
 +static INLINE int32_t
+p_atomic_inc_return(int32_t *v)
+{
+   return _InterlockedIncrement((long *)v);
+}
+
 static INLINE void
 p_atomic_dec(int32_t *v)
 {
@@ -295,6 +365,12 @@ p_atomic_dec(int32_t *v)
 }
  static INLINE int32_t
+p_atomic_dec_return(int32_t *v)
+{
+   return _InterlockedDecrement((long *)v);
+}
+
+static INLINE int32_t
 p_atomic_cmpxchg(int32_t *v, int32_t old, int32_t _new)
 {
return _InterlockedCompareExchange((long *)v, _new, old);
@@ -329,6 +405,8 @@ p_atomic_dec_zero(int32_t *v)
  #define p_atomic_inc(_v) atomic_inc_32((uint32_t *) _v)
 #define p_atomic_dec(_v) atomic_dec_32((uint32_t *) _v)
+#define p_atomic_inc_return(_v) atomic_inc_32_nv((uint32_t *) _v)
+#define p_atomic_dec_return(_v) atomic_dec_32_nv((uint32_t *) _v)
  #define p_atomic_cmpxchg(_v, _old, _new) \
atomic_cas_32( (uint32_t *) _v, (uint32_t) _old, (uint32_t) _new)
--
2.1.3


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 3/9] gallium/auxiliary: implement sw_probe_wrapped

2014-11-02 Thread David Heidelberg

Implement pipe_loader_sw_probe_wrapped which allows to use the wrapped
software renderer backend when using the pipe loader.

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/pipe-loader/pipe_loader.h| 11 +++
 src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 22 
++

 src/gallium/targets/gbm/Makefile.am|  1 +
 src/gallium/targets/opencl/Makefile.am |  1 +
 src/gallium/targets/xa/Makefile.am |  1 +
 src/gallium/tests/trivial/Makefile.am  |  1 +
 6 files changed, 37 insertions(+)

diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.h 
b/src/gallium/auxiliary/pipe-loader/pipe_loader.h

index 6127a6a..9f43f17 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader.h
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.h
@@ -166,6 +166,17 @@ pipe_loader_sw_probe_null(struct pipe_loader_device 
**devs);

 int
 pipe_loader_sw_probe(struct pipe_loader_device **devs, int ndev);
 +/**
+ * Get a software device wrapped atop another device.
+ *
+ * This function is platform-specific.
+ *
+ * \sa pipe_loader_probe
+ */
+boolean
+pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
+ struct pipe_screen *screen);
+
 #ifdef HAVE_PIPE_LOADER_DRM
  /**
diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c 
b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c

index b1b1ca6..b152f60 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
@@ -29,8 +29,11 @@
  #include util/u_memory.h
 #include util/u_dl.h
+#ifdef HAVE_PIPE_LOADER_DRI
 #include sw/dri/dri_sw_winsys.h
+#endif
 #include sw/null/null_sw_winsys.h
+#include sw/wrapper/wrapper_sw_winsys.h
 #ifdef HAVE_PIPE_LOADER_XLIB
 /* Explicitly wrap the header to ease build without X11 headers */
 #include sw/xlib/xlib_sw_winsys.h
@@ -140,6 +143,25 @@ pipe_loader_sw_probe(struct pipe_loader_device 
**devs, int ndev)

return i;
 }
 +boolean
+pipe_loader_sw_probe_wrapped(struct pipe_loader_device **dev,
+ struct pipe_screen *screen)
+{
+   struct pipe_loader_sw_device *sdev = 
CALLOC_STRUCT(pipe_loader_sw_device);

+
+   sdev-base.type = PIPE_LOADER_DEVICE_SOFTWARE;
+   sdev-base.driver_name = swrast;
+   sdev-base.ops = pipe_loader_sw_ops;
+   sdev-ws = wrapper_sw_winsys_wrap_pipe_screen(screen);
+
+   if (!sdev-ws) {
+  FREE(sdev);
+  return FALSE;
+   }
+   *dev = sdev-base;
+   return TRUE;
+}
+
 static void
 pipe_loader_sw_release(struct pipe_loader_device **dev)
 {
diff --git a/src/gallium/targets/gbm/Makefile.am 
b/src/gallium/targets/gbm/Makefile.am

index 2c9b425..679c994 100644
--- a/src/gallium/targets/gbm/Makefile.am
+++ b/src/gallium/targets/gbm/Makefile.am
@@ -34,6 +34,7 @@ gbm_gallium_drm_la_SOURCES =
 gbm_gallium_drm_la_LIBADD = \
$(top_builddir)/src/gallium/state_trackers/gbm/libgbm.la \
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
+   $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
$(top_builddir)/src/util/libmesautil.la \
$(LIBDRM_LIBS) \
$(GALLIUM_COMMON_LIB_DEPS)
diff --git a/src/gallium/targets/opencl/Makefile.am 
b/src/gallium/targets/opencl/Makefile.am

index 1c5a908..fe458bc 100644
--- a/src/gallium/targets/opencl/Makefile.am
+++ b/src/gallium/targets/opencl/Makefile.am
@@ -20,6 +20,7 @@ lib@OPENCL_LIBNAME@_la_LIBADD = \

$(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader_client.la \
$(top_builddir)/src/gallium/state_trackers/clover/libclover.la \
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
+   $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
$(top_builddir)/src/util/libmesautil.la \
$(GALLIUM_PIPE_LOADER_WINSYS_LIBS) \
$(GALLIUM_PIPE_LOADER_CLIENT_LIBS) \
diff --git a/src/gallium/targets/xa/Makefile.am 
b/src/gallium/targets/xa/Makefile.am

index 77d9fa6..c1f52de 100644
--- a/src/gallium/targets/xa/Makefile.am
+++ b/src/gallium/targets/xa/Makefile.am
@@ -36,6 +36,7 @@ libxatracker_la_SOURCES =
 libxatracker_la_LIBADD = \
$(top_builddir)/src/gallium/state_trackers/xa/libxatracker.la \
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
+   $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
$(top_builddir)/src/util/libmesautil.la \
$(LIBDRM_LIBS) \
$(GALLIUM_COMMON_LIB_DEPS)
diff --git a/src/gallium/tests/trivial/Makefile.am 
b/src/gallium/tests/trivial/Makefile.am

index fcd240e..a24b5ec 100644
--- a/src/gallium/tests/trivial/Makefile.am
+++ b/src/gallium/tests/trivial/Makefile.am
@@ -14,6 +14,7 @@ AM_CPPFLAGS = \
 LDADD = \

$(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader_client.la \
$(top_builddir)/src/gallium/auxiliary/libgallium.la \
+   $(top_builddir)/src/gallium/winsys/sw/wrapper/libwsw.la \
$(top_builddir)/src/util/libmesautil.la

[Mesa-dev] [PATCH v3 6/9] gallium/auxiliary: add dump functions for bind and transfer flags

2014-11-02 Thread David Heidelberg

v2: rename and extend support with code for C11 and MSVC (thanks to Brian)

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/util/u_dump.h |  6 ++
 src/gallium/auxiliary/util/u_dump_defines.c | 86 
+

 2 files changed, 92 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_dump.h 
b/src/gallium/auxiliary/util/u_dump.h

index 58e7dfd..84ba1ed 100644
--- a/src/gallium/auxiliary/util/u_dump.h
+++ b/src/gallium/auxiliary/util/u_dump.h
@@ -88,6 +88,12 @@ util_dump_tex_filter(unsigned value, boolean shortened);
 const char *
 util_dump_query_type(unsigned value, boolean shortened);
 +const char *
+util_dump_bind_flags(unsigned flags);
+
+const char *
+util_dump_transfer_flags(unsigned flags);
+
  /*
  * p_state.h, through a FILE
diff --git a/src/gallium/auxiliary/util/u_dump_defines.c 
b/src/gallium/auxiliary/util/u_dump_defines.c

index 03fd15d..20ae6c0 100644
--- a/src/gallium/auxiliary/util/u_dump_defines.c
+++ b/src/gallium/auxiliary/util/u_dump_defines.c
@@ -61,6 +61,36 @@ util_dump_enum_continuous(unsigned value,
return names[value];
 }
 +static const char *
+util_dump_flags(unsigned flags, const char *prefix,
+unsigned num_names,
+const char **names)
+{
+#if __STDC_VERSION__ = 201112  !defined __STDC_NO_THREADS__
+   static _Thread_local char str[256];
+#elif defined(PIPE_CC_GCC)
+   static __thread char str[256];
+#elif defined(PIPE_CC_MSVC)
+   static __declspec(thread) char str[256];
+#else
+#error Unsupported compiler: please find how to implement thread local 
storage on it

+#endif
+   int i, pos;
+
+   if (!flags)
+  return ;
+   pos = snprintf(str, Elements(str), %s_, prefix);
+
+   for (i = 0; (i  num_names)  flags; flags = 1, ++i) {
+  if (flags  1) {
+ pos += snprintf(str[pos], Elements(str) - pos, %s, names[i]);
+ if (flags  ~1)
+pos += snprintf(str[pos], Elements(str) - pos, |);
+  }
+   }
+   return str;
+}
+
  #define DEFINE_UTIL_DUMP_CONTINUOUS(_name) \
const char * \
@@ -90,6 +120,14 @@ util_dump_enum_continuous(unsigned value,
}
  +#define DEFINE_UTIL_DUMP_FLAGS(_prefix, _name)   \
+   const char * \
+   util_dump_##_name##_flags(unsigned flags) \
+   { \
+  return util_dump_flags(flags, _prefix, 
Elements(util_dump_##_name##_flag_names), util_dump_##_name##_flag_names); \

+   }
+
+
 static const char *
 util_dump_blend_factor_names[] = {
UTIL_DUMP_INVALID_NAME, /* 0x0 */
@@ -392,3 +430,51 @@ util_dump_query_type_short_names[] = {
 };
  DEFINE_UTIL_DUMP_CONTINUOUS(query_type)
+
+
+static const char *
+util_dump_bind_flag_names[] = {
+   DEPTH_STENCIL,
+   RENDER_TARGET,
+   BLENDABLE,
+   SAMPLER_VIEW,
+   VERTEX_BUFFER,
+   INDEX_BUFFER,
+   CONSTANT_BUFFER,
+   (7),
+   DISPLAY_TARGET,
+   TRANSFER_WRITE,
+   TRANSFER_READ,
+   STREAM_OUTPUT,
+   (12),
+   (13),
+   (14),
+   (15),
+   CURSOR,
+   CUSTOM,
+   GLOBAL,
+   SHADER_RESOURCE,
+   COMPUTE_RESOURCE
+};
+
+DEFINE_UTIL_DUMP_FLAGS(PIPE_BIND, bind)
+
+
+static const char *
+util_dump_transfer_flag_names[] = {
+   READ,
+   WRITE,
+   MAP_DIRECTLY,
+   (3),
+   (4),
+   (5),
+   (6),
+   (7),
+   DISCARD_RANGE,
+   DONTBLOCK,
+   UNSYNCHRONIZED,
+   FLUSH_EXPLICIT,
+   DISCARD_WHOLE_RESOURCE
+};
+
+DEFINE_UTIL_DUMP_FLAGS(, transfer)
--
2.1.3


___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 5/9] gallium/auxiliary: add contained and rect checks (v3)

2014-11-02 Thread David Heidelberg

v3: thanks to Brian, improved coding style, also glennk helped spot few
things (unsigned - int, two constify)

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/util/u_box.h  | 230 


 src/gallium/auxiliary/util/u_rect.h |  28 +
 2 files changed, 258 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_box.h 
b/src/gallium/auxiliary/util/u_box.h

index 0b28d0f..e22af9c 100644
--- a/src/gallium/auxiliary/util/u_box.h
+++ b/src/gallium/auxiliary/util/u_box.h
@@ -2,6 +2,7 @@
 #define UTIL_BOX_INLINES_H
  #include pipe/p_state.h
+#include util/u_math.h
  static INLINE
 void u_box_1d( unsigned x,
@@ -77,4 +78,233 @@ void u_box_3d( unsigned x,
box-depth = d;
 }
 +/* Returns whether @a is contained in or equal to @b. */
+static INLINE boolean
+u_box_contained(struct pipe_box *a, struct pipe_box *b)
+{
+   return
+  a-x = b-x  (a-x + a-width  = b-x + b-width) 
+  a-y = b-y  (a-y + a-height = b-y + b-height) 
+  a-z = b-z  (a-z + a-depth  = b-z + b-depth);
+}
+
+/* Clips @box to width @w and height @h.
+ * Returns -1 if the resulting box would be empty (then @box is left 
unchanged).

+ *  0 if nothing have been reduced.
+ *   = 1 if width/height/both have been reduced.
+ * Aliasing permitted.
+ */
+static INLINE int
+u_box_clip_2d(struct pipe_box *dst,
+  const struct pipe_box *box, int w, int h)
+{
+   unsigned i;
+   int a[2], b[2], dim[2];
+   int res = 0;
+
+   if (!box-width || !box-height)
+  return -1;
+   dim[0] = w;
+   dim[1] = h;
+   a[0] = box-x;
+   a[1] = box-y;
+   b[0] = box-x + box-width;
+   b[1] = box-y + box-height;
+
+   for (i = 0; i  2; ++i) {
+  if (b[i]  a[i]) {
+ if (a[i]  0 || b[i] = dim[i])
+return -1;
+ if (a[i]  dim[i]) {
+a[i] = dim[i];
+res |= (1  i);
+}
+ if (b[i]  0) {
+b[i] = 0;
+res |= (1  i);
+ }
+  } else {
+ if (b[i]  0 || a[i] = dim[i])
+return -1;
+ if (a[i]  0) {
+a[i] = 0;
+res |= (1  i);
+ }
+ if (b[i]  dim[i]) {
+b[i] = dim[i];
+res |= (1  i);
+ }
+  }
+   }
+
+   if (res) {
+  dst-x = a[0];
+  dst-y = a[1];
+  dst-width = b[0] - a[0];
+  dst-height = b[1] - a[1];
+   }
+   return res;
+}
+
+static INLINE int
+u_box_clip_3d(struct pipe_box *dst,
+  const struct pipe_box *box, int w, int h, int d)
+{
+   unsigned i;
+   int a[3], b[3], dim[3];
+   int res = 0;
+
+   if (!box-width || !box-height)
+  return -1;
+   dim[0] = w;
+   dim[1] = h;
+   dim[2] = d;
+   a[0] = box-x;
+   a[1] = box-y;
+   a[2] = box-z;
+   b[0] = box-x + box-width;
+   b[1] = box-y + box-height;
+   b[2] = box-z + box-depth;
+
+   for (i = 0; i  2; ++i) { /* ignore z */
+  if (b[i]  a[i]) {
+ if (a[i]  0 || b[i] = dim[i])
+return -1;
+ if (a[i]  dim[i]) {
+a[i] = dim[i];
+res |= (1  i);
+ }
+ if (b[i]  0) {
+b[i] = 0;
+res |= (1  i);
+ }
+  } else {
+ if (b[i]  0 || a[i] = dim[i])
+return -1;
+ if (a[i]  0) {
+a[i] = 0;
+res |= (1  i);
+ }
+ if (b[i]  dim[i]) {
+b[i] = dim[i];
+res |= (1  i);
+ }
+  }
+   }
+
+   if (res) {
+  dst-x = a[0];
+  dst-y = a[1];
+  dst-z = a[2];
+  dst-width = b[0] - a[0];
+  dst-height = b[1] - a[1];
+  dst-depth = b[2] - a[2];
+   }
+   return res;
+}
+
+/* Return true if @a is contained in or equal to @b.
+ */
+static INLINE boolean
+u_box_contained_2d(const struct pipe_box *a, const struct pipe_box *b)
+{
+   int a_x1 = a-x + a-width;
+   int b_x1 = b-x + b-width;
+   int a_y1 = a-y + a-height;
+   int b_y1 = b-y + b-height;
+   return
+  a-x = b-x  a_x1 = b_x1 
+  a-y = b-y  a_y1 = b_y1;
+}
+
+static INLINE int64_t
+u_box_volume(const struct pipe_box *box)
+{
+   return (int64_t)box-width * box-height * box-depth;
+}
+
+/* Aliasing of @dst and @a permitted. */
+static INLINE void
+u_box_cover_2d(struct pipe_box *dst,
+   struct pipe_box *a, const struct pipe_box *b)
+{
+   int x1_a = a-x + a-width;
+   int y1_a = a-y + a-height;
+   int x1_b = b-x + b-width;
+   int y1_b = b-y + b-height;
+
+   dst-x = MIN2(a-x, b-x);
+   dst-y = MIN2(a-y, b-y);
+
+   dst-width = MAX2(x1_a, x1_b) - dst-x;
+   dst-height = MAX2(y1_a, y1_b) - dst-y;
+}
+
+/* Aliasing of @dst and @a permitted. */
+static INLINE void
+u_box_cover(struct pipe_box *dst,
+struct pipe_box *a, const struct pipe_box *b)
+{
+   int x1_a = a-x + a-width;
+   int y1_a = a-y + a-height;
+   int z1_a = a-z + a-depth;
+   int x1_b = b-x + b-width;
+   int y1_b = b-y + b-height;
+   int z1_b = b-z + b-depth;
+
+   dst-x = MIN2(a-x, b-x);
+   dst-y = MIN2(a-y, b-y);
+   dst-z = MIN2(a-z, b-z

[Mesa-dev] [PATCH v3 8/9] nine: Add drirc options (v2)

2014-11-02 Thread David Heidelberg

Implements vblank_mode and throttling, which  allows us change default ratio
between framerate and input lag.

Signed-off-by: David Heidelberg da...@ixit.cz
Signed-off-by: Axel Davy axel.d...@ens.fr
---
 src/gallium/state_trackers/nine/adapter9.h  |  1 +
 src/gallium/state_trackers/nine/swapchain9.c|  5 
 src/gallium/targets/d3dadapter9/drm.c   | 35 
+

 src/mesa/drivers/dri/common/xmlpool/t_options.h | 13 +
 4 files changed, 54 insertions(+)

diff --git a/src/gallium/state_trackers/nine/adapter9.h 
b/src/gallium/state_trackers/nine/adapter9.h

index ad04e4c..3c429d0 100644
--- a/src/gallium/state_trackers/nine/adapter9.h
+++ b/src/gallium/state_trackers/nine/adapter9.h
@@ -37,6 +37,7 @@ struct d3dadapter9_context
 BOOL linear_framebuffer;
 BOOL throttling;
 int throttling_value;
+int vblank_mode;
  void (*destroy)( struct d3dadapter9_context *ctx );
 };
diff --git a/src/gallium/state_trackers/nine/swapchain9.c 
b/src/gallium/state_trackers/nine/swapchain9.c

index 69b19e1..74ab01d 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -166,6 +166,11 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
 if (This-desired_fences  DRI_SWAP_FENCES_MAX)
 This-desired_fences = DRI_SWAP_FENCES_MAX;
 +if (This-actx-vblank_mode == 0)
+pParams-PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
+else if (This-actx-vblank_mode == 3)
+pParams-PresentationInterval = D3DPRESENT_INTERVAL_ONE;
+
 if (mode  This-mode) {
 *(This-mode) = *mode;
 } else if (mode) {
diff --git a/src/gallium/targets/d3dadapter9/drm.c 
b/src/gallium/targets/d3dadapter9/drm.c

index 09b8e82..e9b1ecc 100644
--- a/src/gallium/targets/d3dadapter9/drm.c
+++ b/src/gallium/targets/d3dadapter9/drm.c
@@ -36,6 +36,9 @@
 #include d3dadapter/d3dadapter9.h
 #include d3dadapter/drm.h
 +#include xmlconfig.h
+#include xmlpool.h
+
 #include libdrm/drm.h
 #include sys/ioctl.h
 #include fcntl.h
@@ -49,6 +52,16 @@
  (DWORD)((lo)  0x) \
 ))
 +const char __driConfigOptionsNine[] =
+DRI_CONF_BEGIN
+DRI_CONF_SECTION_PERFORMANCE
+ DRI_CONF_VBLANK_MODE(DRI_CONF_VBLANK_DEF_INTERVAL_1)
+DRI_CONF_SECTION_END
+DRI_CONF_SECTION_NINE
+DRI_CONF_NINE_THROTTLE(-2)
+DRI_CONF_SECTION_END
+DRI_CONF_END;
+
 /* Regarding os versions, we should not define our own as that would 
simply be
  * weird. Defaulting to Win2k/XP seems sane considering the origin of 
D3D9. The
  * driver also defaults to being a generic D3D9 driver, which of 
course only

@@ -229,6 +242,9 @@ drm_create_adapter( int fd,
 int i, different_device;
 const struct drm_conf_ret *throttle_ret = NULL;
 const struct drm_conf_ret *dmabuf_ret = NULL;
+driOptionCache defaultInitOptions;
+driOptionCache userInitOptions;
+int throttling_value_user;
  #if !GALLIUM_STATIC_TARGETS
 const char *paths[] = {
@@ -289,6 +305,25 @@ drm_create_adapter( int fd,
 } else
 ctx-base.throttling = FALSE;
 +driParseOptionInfo(defaultInitOptions, __driConfigOptionsNine);
+driParseConfigFiles(userInitOptions, defaultInitOptions, 0, nine);
+if (driCheckOption(userInitOptions, throttle_value, DRI_INT)) {
+throttling_value_user = driQueryOptioni(userInitOptions, 
throttle_value);

+if (throttling_value_user == -1)
+ctx-base.throttling = FALSE;
+else if (throttling_value_user = 0) {
+ctx-base.throttling = TRUE;
+ctx-base.throttling_value = throttling_value_user;
+}
+}
+
+if (driCheckOption(userInitOptions, vblank_mode, DRI_ENUM))
+ctx-base.vblank_mode = driQueryOptioni(userInitOptions, 
vblank_mode);

+else
+ctx-base.vblank_mode = 1;
+
+driDestroyOptionCache(userInitOptions);
+driDestroyOptionInfo(defaultInitOptions);
  #if GALLIUM_STATIC_TARGETS
 ctx-base.ref = ninesw_create_screen(ctx-base.hal);
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h 
b/src/mesa/drivers/dri/common/xmlpool/t_options.h

index b73a662..e4f6937 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -340,3 +340,16 @@ DRI_CONF_SECTION_BEGIN \
 DRI_CONF_OPT_BEGIN(device_id, string, def) \
 DRI_CONF_DESC(en,gettext(Define the graphic device to use if 
possible)) \

 DRI_CONF_OPT_END
+
+/**
+ * \brief Gallium-Nine specific configuration options
+ */
+
+#define DRI_CONF_SECTION_NINE \
+DRI_CONF_SECTION_BEGIN \
+DRI_CONF_DESC(en,gettext(Gallium Nine))
+
+#define DRI_CONF_NINE_THROTTLE(def) \
+DRI_CONF_OPT_BEGIN(throttle_value, int, def) \
+DRI_CONF_DESC(en,gettext(Define the throttling value. -1 for 
no throttling, -2 for default (usually 2), 0 for glfinish behaviour)) \

+DRI_CONF_OPT_END
--
2.1.3


___
mesa-dev mailing list
mesa-dev

[Mesa-dev] [PATCH v3 7/9] nine: Add state tracker nine for Direct3D9 (v2)

2014-11-02 Thread David Heidelberg
This patch is too big for ML, please see it in 
https://github.com/iXit/Mesa-3D/commits/for-upstream-3 .

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH v3 9/9] nine: Implement threadpool

2014-11-02 Thread David Heidelberg

DRI_PRIME setups have different issues due the lack of dma-buf fences
support in the drivers. For DRI3 DRI_PRIME, a race can appear, making
tearings visible, or worse showing older content than expected. Until
dma-buf fences are well supported (and by all drivers), an alternative
is to send the buffers to the server only when rendering has finished.
Since waiting the rendering has finished in the main thread has a
performance impact, this patch uses an additional thread to offload the
wait and the sending of the buffers to the server.

Signed-off-by: Axel Davy axel.d...@ens.fr
Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/state_trackers/nine/Makefile.sources |   2 +
 src/gallium/state_trackers/nine/adapter9.h   |   1 +
 src/gallium/state_trackers/nine/swapchain9.c |  86 +-
 src/gallium/state_trackers/nine/swapchain9.h |   7 +
 src/gallium/state_trackers/nine/threadpool.c | 202 
+++

 src/gallium/state_trackers/nine/threadpool.h |  55 ++
 src/gallium/targets/d3dadapter9/drm.c|  16 +-
 src/mesa/drivers/dri/common/xmlpool/t_options.h  |   5 +
 8 files changed, 364 insertions(+), 10 deletions(-)
 create mode 100644 src/gallium/state_trackers/nine/threadpool.c
 create mode 100644 src/gallium/state_trackers/nine/threadpool.h

diff --git a/src/gallium/state_trackers/nine/Makefile.sources 
b/src/gallium/state_trackers/nine/Makefile.sources

index b821961..99b623a 100644
--- a/src/gallium/state_trackers/nine/Makefile.sources
+++ b/src/gallium/state_trackers/nine/Makefile.sources
@@ -59,6 +59,8 @@ C_SOURCES := \
swapchain9.h \
texture9.c \
texture9.h \
+   threadpool.c \
+   threadpool.h \
vertexbuffer9.c \
vertexbuffer9.h \
vertexdeclaration9.c \
diff --git a/src/gallium/state_trackers/nine/adapter9.h 
b/src/gallium/state_trackers/nine/adapter9.h

index 3c429d0..b2fea6c 100644
--- a/src/gallium/state_trackers/nine/adapter9.h
+++ b/src/gallium/state_trackers/nine/adapter9.h
@@ -38,6 +38,7 @@ struct d3dadapter9_context
 BOOL throttling;
 int throttling_value;
 int vblank_mode;
+BOOL thread_submit;
  void (*destroy)( struct d3dadapter9_context *ctx );
 };
diff --git a/src/gallium/state_trackers/nine/swapchain9.c 
b/src/gallium/state_trackers/nine/swapchain9.c

index 74ab01d..ffa89b2 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -33,6 +33,8 @@
 #include hud/hud_context.h
 #include state_tracker/drm_driver.h
 +#include threadpool.h
+
 #define DBG_CHANNEL DBG_SWAPCHAIN
  #define UNTESTED(n) DBG(UNTESTED point %d. Please tell if it 
worked\n, n)

@@ -72,6 +74,7 @@ NineSwapChain9_ctor( struct NineSwapChain9 *This,
 params.hDeviceWindow = hFocusWindow;
  This-rendering_done = FALSE;
+This-pool = NULL;
 return NineSwapChain9_Resize(This, params, mode);
 }
 @@ -229,6 +232,21 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
 desc.Width = pParams-BackBufferWidth;
 desc.Height = pParams-BackBufferHeight;
 +if (This-pool) {
+_mesa_threadpool_destroy(This-pool);
+This-pool = NULL;
+}
+This-enable_threadpool = This-actx-thread_submit  
(pParams-SwapEffect != D3DSWAPEFFECT_COPY);

+if (This-enable_threadpool)
+This-pool = _mesa_threadpool_create();
+if (!This-pool)
+This-enable_threadpool = FALSE;
+
+This-tasks = REALLOC(This-tasks,
+  oldBufferCount * sizeof(struct 
threadpool_task *),
+  newBufferCount * sizeof(struct 
threadpool_task *));
+memset(This-tasks, 0, newBufferCount * sizeof(struct 
threadpool_task *));

+
 for (i = 0; i  oldBufferCount; i++) {
 ID3DPresent_DestroyD3DWindowBuffer(This-present, 
This-present_handles[i]);

 This-present_handles[i] = NULL;
@@ -446,6 +464,9 @@ NineSwapChain9_dtor( struct NineSwapChain9 *This )
  DBG(This=%p\n, This);
 +if (This-pool)
+_mesa_threadpool_destroy(This-pool);
+
 if (This-buffers) {
 for (i = 0; i  This-params.BackBufferCount; i++) {
 NineUnknown_Destroy(NineUnknown(This-buffers[i]));
@@ -543,6 +564,40 @@ handle_draw_cursor_and_hud( struct NineSwapChain9 
*This, struct pipe_resource *r

 }
 }
 +struct end_present_struct {
+struct pipe_screen *screen;
+struct pipe_fence_handle *fence_to_wait;
+ID3DPresent *present;
+D3DWindowBuffer *present_handle;
+HWND hDestWindowOverride;
+};
+
+static void work_present(void *data)
+{
+struct end_present_struct *work = data;
+if (work-fence_to_wait) {
+(void) work-screen-fence_finish(work-screen, 
work-fence_to_wait, PIPE_TIMEOUT_INFINITE);
+work-screen-fence_reference(work-screen, 
(work-fence_to_wait), NULL);

+}
+ID3DPresent_PresentBuffer(work-present, work-present_handle, 
work-hDestWindowOverride, NULL, NULL, NULL, 0);

+free(work);
+}
+
+static void

[Mesa-dev] [PATCH] draw: allow LLVM use on non-SSE2 X86 cpus

2014-11-01 Thread David Heidelberg


This patch remove workaround related to LLVM  3.2 bug.

Original bug has been closed as fixed in 2011.
At this moment gallium requires LLVM 3.3 (2013).

LLVM has been tested without SSE2 support in commit
ca70de9bd20bc4a11b2d2d368e0cc1f49527a947 and removed after requiring
LLVM 3.3 in commit 013ff2fae13da41c2f5619c4698b0a7b5aa6a06d

Original LLVM bug: http://llvm.org/bugs/show_bug.cgi?id=6960

Signed-off-by: David Heidelberg da...@ixit.cz
---
 src/gallium/auxiliary/draw/draw_context.c | 15 +--
 1 file changed, 1 insertion(+), 14 deletions(-)


diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index b0f4ca2..37b6c5d 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -53,20 +53,7 @@
 boolean
 draw_get_option_use_llvm(void)
 {
-   static boolean first = TRUE;
-   static boolean value;
-   if (first) {
-  first = FALSE;
-  value = debug_get_bool_option(DRAW_USE_LLVM, TRUE);
-
-#ifdef PIPE_ARCH_X86
-  util_cpu_detect();
-  /* require SSE2 due to LLVM PR6960. XXX Might be fixed by now? */
-  if (!util_cpu_caps.has_sse2)
- value = FALSE;
-#endif
-   }
-   return value;
+   return debug_get_bool_option(DRAW_USE_LLVM, TRUE);
 }
 #else
 boolean

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev