Mesa (master): svga: add missing PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER* cases

2017-11-16 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 501591e8529dc69fd650b3ba49a560c22b4cf31b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=501591e8529dc69fd650b3ba49a560c22b4cf31b

Author: Brian Paul 
Date:   Thu Nov 16 16:35:49 2017 -0700

svga: add missing PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER* cases

Reviewed-by: Charmaine Lee 
Acked-by: Dave Airlie 

---

 src/gallium/drivers/svga/svga_screen.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gallium/drivers/svga/svga_screen.c 
b/src/gallium/drivers/svga/svga_screen.c
index 8621640c84..ab604b989b 100644
--- a/src/gallium/drivers/svga/svga_screen.c
+++ b/src/gallium/drivers/svga/svga_screen.c
@@ -708,6 +708,8 @@ vgpu10_get_shader_param(struct pipe_screen *screen,
case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
case PIPE_SHADER_CAP_INT64_ATOMICS:
+   case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
+   case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS:
   return 0;
case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
   return 32;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): util: add new ASSERT_BITFIELD_SIZE() macro (v3)

2017-11-16 Thread Brian Paul
Module: Mesa
Branch: master
Commit: fe81e1f9751cca8de33c3c45f6fc181c626c57f0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe81e1f9751cca8de33c3c45f6fc181c626c57f0

Author: Brian Paul 
Date:   Wed Nov 15 16:17:44 2017 -0700

util: add new ASSERT_BITFIELD_SIZE() macro (v3)

For checking that bitfields are large enough to hold the largest
expected value.

v2: move into existing util/macros.h header where STATIC_ASSERT() lives.
v3: add MAYBE_UNUSED to variable declaration

Reviewed-by: Ian Romanick 

---

 src/util/macros.h | 17 +
 1 file changed, 17 insertions(+)

diff --git a/src/util/macros.h b/src/util/macros.h
index a9a52a1a47..aa36253217 100644
--- a/src/util/macros.h
+++ b/src/util/macros.h
@@ -241,6 +241,23 @@ do {   \
 #define ATTRIBUTE_NOINLINE
 #endif
 
+
+/**
+ * Check that STRUCT::FIELD can hold MAXVAL.  We use a lot of bitfields
+ * in Mesa/gallium.  We have to be sure they're of sufficient size to
+ * hold the largest expected value.
+ * Note that with MSVC, enums are signed and enum bitfields need one extra
+ * high bit (always zero) to ensure the max value is handled correctly.
+ * This macro will detect that with MSVC, but not GCC.
+ */
+#define ASSERT_BITFIELD_SIZE(STRUCT, FIELD, MAXVAL) \
+   do { \
+  MAYBE_UNUSED STRUCT s;\
+  s.FIELD = (MAXVAL); \
+  assert((int) s.FIELD == (MAXVAL) && "Insufficient bitfield size!"); \
+   } while (0)
+
+
 /** Compute ceiling of integer quotient of A divided by B. */
 #define DIV_ROUND_UP( A, B )  ( (A) % (B) == 0 ? (A)/(B) : (A)/(B)+1 )
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: s/unsigned/glsl_base_type/ in glsl type code (v2)

2017-11-16 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 92c1290dc57b493690ffe754b1b7724e93d41900
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=92c1290dc57b493690ffe754b1b7724e93d41900

Author: Brian Paul 
Date:   Mon Nov  6 12:44:06 2017 -0700

glsl: s/unsigned/glsl_base_type/ in glsl type code (v2)

Declare glsl_type::sampled_type as glsl_base_type as we do for the
base_type field.  And make base_type a bitfield to save a few bytes.

Update glsl_type constructor to take glsl_base_type instead of unsigned
and pass GLSL_TYPE_VOID instead of zero.

No Piglit regressions with llvmpipe.

v2:
- Declare both base_type and sampled_type as 8-bit fields
- Use the new ASSERT_BITFIELD_SIZE() macro.

Reviewed-by: Nicolai Hähnle 

---

 src/compiler/glsl_types.cpp | 30 +++---
 src/compiler/glsl_types.h   | 27 ---
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/src/compiler/glsl_types.cpp b/src/compiler/glsl_types.cpp
index 704b63c5cf..107a81f5e7 100644
--- a/src/compiler/glsl_types.cpp
+++ b/src/compiler/glsl_types.cpp
@@ -50,9 +50,9 @@ glsl_type::glsl_type(GLenum gl_type,
  glsl_base_type base_type, unsigned vector_elements,
  unsigned matrix_columns, const char *name) :
gl_type(gl_type),
-   base_type(base_type),
+   base_type(base_type), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing(0), interface_row_major(0),
+   interface_packing(0), interface_row_major(0),
vector_elements(vector_elements), matrix_columns(matrix_columns),
length(0)
 {
@@ -79,11 +79,11 @@ glsl_type::glsl_type(GLenum gl_type,
 
 glsl_type::glsl_type(GLenum gl_type, glsl_base_type base_type,
  enum glsl_sampler_dim dim, bool shadow, bool array,
- unsigned type, const char *name) :
+ glsl_base_type type, const char *name) :
gl_type(gl_type),
-   base_type(base_type),
+   base_type(base_type), sampled_type(type),
sampler_dimensionality(dim), sampler_shadow(shadow),
-   sampler_array(array), sampled_type(type), interface_packing(0),
+   sampler_array(array), interface_packing(0),
interface_row_major(0), length(0)
 {
mtx_lock(_type::mem_mutex);
@@ -102,9 +102,9 @@ glsl_type::glsl_type(GLenum gl_type, glsl_base_type 
base_type,
 glsl_type::glsl_type(const glsl_struct_field *fields, unsigned num_fields,
  const char *name) :
gl_type(0),
-   base_type(GLSL_TYPE_STRUCT),
+   base_type(GLSL_TYPE_STRUCT), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing(0), interface_row_major(0),
+   interface_packing(0), interface_row_major(0),
vector_elements(0), matrix_columns(0),
length(num_fields)
 {
@@ -131,9 +131,9 @@ glsl_type::glsl_type(const glsl_struct_field *fields, 
unsigned num_fields,
  enum glsl_interface_packing packing,
  bool row_major, const char *name) :
gl_type(0),
-   base_type(GLSL_TYPE_INTERFACE),
+   base_type(GLSL_TYPE_INTERFACE), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing((unsigned) packing),
+   interface_packing((unsigned) packing),
interface_row_major((unsigned) row_major),
vector_elements(0), matrix_columns(0),
length(num_fields)
@@ -159,9 +159,9 @@ glsl_type::glsl_type(const glsl_struct_field *fields, 
unsigned num_fields,
 glsl_type::glsl_type(const glsl_type *return_type,
  const glsl_function_param *params, unsigned num_params) :
gl_type(0),
-   base_type(GLSL_TYPE_FUNCTION),
+   base_type(GLSL_TYPE_FUNCTION), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing(0), interface_row_major(0),
+   interface_packing(0), interface_row_major(0),
vector_elements(0), matrix_columns(0),
length(num_params)
 {
@@ -191,9 +191,9 @@ glsl_type::glsl_type(const glsl_type *return_type,
 
 glsl_type::glsl_type(const char *subroutine_name) :
gl_type(0),
-   base_type(GLSL_TYPE_SUBROUTINE),
+   base_type(GLSL_TYPE_SUBROUTINE), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing(0), interface_row_major(0),
+   interface_packing(0), interface_row_major(0),
vector_elements(1), matrix_columns(1),
length(0)
 {
@@ -442,9 +442,9 @@ _mesa_glsl_release_types(void)
 
 
 glsl_type::glsl_type(const glsl_type *array, unsigned length) :
-   base_type(GLSL_TYPE_ARRAY),
+   base_type(GLSL_TYPE_ARRAY), sampled_type(GLSL_TYPE_VOID),
sampler_dimensionality(0), sampler_shadow(0), sampler_array(0),
-   sampled_type(0), interface_packing(0), interface_row_major(0),
+   

Mesa (master): st/mesa: use enum types instead of int/unsigned (v3)

2017-11-16 Thread Brian Paul
Module: Mesa
Branch: master
Commit: d4726b13183c45fbc0869596c128f7c030b3cd9c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d4726b13183c45fbc0869596c128f7c030b3cd9c

Author: Brian Paul 
Date:   Mon Nov  6 09:19:55 2017 -0700

st/mesa: use enum types instead of int/unsigned (v3)

Use the proper enum types for various variables.  Makes life in gdb
a little nicer.  Note that the size of enum bitfields must be one
larger so the high bit is always zero (for MSVC).

v2: also increase size of image_format bitfield, per Eric Engestrom.
v3: use the new ASSERT_BITFIELD_SIZE() macro

Reviewed-by: Charmaine Lee 
Reviewed-by: Roland Scheidegger 
Reviewed-by: Nicolai Hähnle 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp   | 16 +---
 src/mesa/state_tracker/st_glsl_to_tgsi_private.h |  6 +++---
 src/mesa/state_tracker/st_mesa_to_tgsi.c |  6 +++---
 src/mesa/state_tracker/st_mesa_to_tgsi.h |  7 ---
 4 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index a863eb29fe..0772b73627 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -189,10 +189,10 @@ public:
int num_address_regs;
uint32_t samplers_used;
glsl_base_type sampler_types[PIPE_MAX_SAMPLERS];
-   int sampler_targets[PIPE_MAX_SAMPLERS];   /**< One of TGSI_TEXTURE_* */
+   enum tgsi_texture_type sampler_targets[PIPE_MAX_SAMPLERS];
int images_used;
int image_targets[PIPE_MAX_SHADER_IMAGES];
-   unsigned image_formats[PIPE_MAX_SHADER_IMAGES];
+   enum pipe_format image_formats[PIPE_MAX_SHADER_IMAGES];
bool indirect_addr_consts;
int wpos_transform_const;
 
@@ -6229,6 +6229,15 @@ st_translate_program(
assert(numInputs <= ARRAY_SIZE(t->inputs));
assert(numOutputs <= ARRAY_SIZE(t->outputs));
 
+   ASSERT_BITFIELD_SIZE(st_src_reg, type, GLSL_TYPE_ERROR);
+   ASSERT_BITFIELD_SIZE(st_dst_reg, type, GLSL_TYPE_ERROR);
+   ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, image_format, 
PIPE_FORMAT_COUNT);
+   ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, tex_target,
+(gl_texture_index) (NUM_TEXTURE_TARGETS - 1));
+   ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, image_format,
+(enum pipe_format) (PIPE_FORMAT_COUNT - 1));
+   ASSERT_BITFIELD_SIZE(glsl_to_tgsi_instruction, op, TGSI_OPCODE_LAST - 1);
+
t = CALLOC_STRUCT(st_translate);
if (!t) {
   ret = PIPE_ERROR_OUT_OF_MEMORY;
@@ -6549,7 +6558,8 @@ st_translate_program(
/* texture samplers */
for (i = 0; i < frag_const->MaxTextureImageUnits; i++) {
   if (program->samplers_used & (1u << i)) {
- unsigned type = st_translate_texture_type(program->sampler_types[i]);
+ enum tgsi_return_type type =
+st_translate_texture_type(program->sampler_types[i]);
 
  t->samplers[i] = ureg_DECL_sampler(ureg, i);
 
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_private.h 
b/src/mesa/state_tracker/st_glsl_to_tgsi_private.h
index d57525d9c7..3e519361dd 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi_private.h
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_private.h
@@ -127,13 +127,13 @@ public:
unsigned is_64bit_expanded:1;
unsigned sampler_base:5;
unsigned sampler_array_size:6; /**< 1-based size of sampler array, 1 if not 
array */
-   unsigned tex_target:4; /**< One of TEXTURE_*_INDEX */
+   gl_texture_index tex_target:5;
glsl_base_type tex_type:5;
unsigned tex_shadow:1;
-   unsigned image_format:9;
+   enum pipe_format image_format:10;
unsigned tex_offset_num_offset:3;
unsigned dead_mask:4; /**< Used in dead code elimination */
-   unsigned buffer_access:3; /**< buffer access type */
+   unsigned buffer_access:3; /**< bitmask of TGSI_MEMORY_x bits */
 
const struct tgsi_opcode_info *info;
 };
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.c 
b/src/mesa/state_tracker/st_mesa_to_tgsi.c
index 275ca76725..75825c3cf6 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.c
+++ b/src/mesa/state_tracker/st_mesa_to_tgsi.c
@@ -164,8 +164,8 @@ src_register(struct st_translate *t,
 /**
  * Map mesa texture target to TGSI texture target.
  */
-unsigned
-st_translate_texture_target(GLuint textarget, GLboolean shadow)
+enum tgsi_texture_type
+st_translate_texture_target(gl_texture_index textarget, GLboolean shadow)
 {
if (shadow) {
   switch (textarget) {
@@ -223,7 +223,7 @@ st_translate_texture_target(GLuint textarget, GLboolean 
shadow)
 /**
  * Map GLSL base type to TGSI return type.
  */
-unsigned
+enum tgsi_return_type
 st_translate_texture_type(enum glsl_base_type type)
 {
switch (type) {
diff --git a/src/mesa/state_tracker/st_mesa_to_tgsi.h 
b/src/mesa/state_tracker/st_mesa_to_tgsi.h
index 106cf85a3e..06e8b70cb4 100644
--- a/src/mesa/state_tracker/st_mesa_to_tgsi.h
+++ 

Mesa (master): util/tgsi: use ASSERT_BITFIELD_SIZE() to check opcode field size

2017-11-16 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 940fba68c903d9b4da2d99a68f1c06c53d4fe82a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=940fba68c903d9b4da2d99a68f1c06c53d4fe82a

Author: Brian Paul 
Date:   Mon Nov  6 18:11:38 2017 -0700

util/tgsi: use ASSERT_BITFIELD_SIZE() to check opcode field size

I've noticed at least two places where we store the TGSI opcode in
an unsigned:8 bitfield.  We're at 249 opcodes now.  If we hit 256 we'll
need to grow those bitfields.  Use the new ASSERT_BITFIELD_SIZE() macro
to detect that.

Reviewed-by: Nicolai Hähnle 

---

 src/gallium/auxiliary/tgsi/tgsi_info.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c 
b/src/gallium/auxiliary/tgsi/tgsi_info.c
index 4e399508e5..c39de0edfc 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_info.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_info.c
@@ -55,6 +55,8 @@ tgsi_get_opcode_info( uint opcode )
 {
static boolean firsttime = 1;
 
+   ASSERT_BITFIELD_SIZE(struct tgsi_opcode_info, opcode, TGSI_OPCODE_LAST - 1);
+
if (firsttime) {
   unsigned i;
   firsttime = 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/mesa: don' t move ssbo after atomic buffers if we support hw atomics

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: c8ce3c26893e91ae4e07b1c2d6cf4b89e8c297aa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c8ce3c26893e91ae4e07b1c2d6cf4b89e8c297aa

Author: Dave Airlie 
Date:   Fri Nov 10 11:50:37 2017 +1000

st/mesa: don't move ssbo after atomic buffers if we support hw atomics

There is no need to have these overlap if we support hw atomics.

Reviewed-by: Ilia Mirkin 
Signed-off-by: Dave Airlie 

---

 src/mesa/state_tracker/st_atom_storagebuf.c |  8 +---
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp  | 14 --
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_storagebuf.c 
b/src/mesa/state_tracker/st_atom_storagebuf.c
index a31a8fd4be..2c55af374f 100644
--- a/src/mesa/state_tracker/st_atom_storagebuf.c
+++ b/src/mesa/state_tracker/st_atom_storagebuf.c
@@ -47,12 +47,14 @@ st_bind_ssbos(struct st_context *st, struct gl_program 
*prog,
unsigned i;
struct pipe_shader_buffer buffers[MAX_SHADER_STORAGE_BUFFERS];
struct gl_program_constants *c;
-
+   int buffer_base;
if (!prog || !st->pipe->set_shader_buffers)
   return;
 
c = >ctx->Const.Program[prog->info.stage];
 
+   buffer_base = st->has_hw_atomics ? 0 : c->MaxAtomicBuffers;
+
for (i = 0; i < prog->info.num_ssbos; i++) {
   struct gl_buffer_binding *binding;
   struct st_buffer_object *st_obj;
@@ -79,13 +81,13 @@ st_bind_ssbos(struct st_context *st, struct gl_program 
*prog,
  sb->buffer_size = 0;
   }
}
-   st->pipe->set_shader_buffers(st->pipe, shader_type, c->MaxAtomicBuffers,
+   st->pipe->set_shader_buffers(st->pipe, shader_type, buffer_base,
 prog->info.num_ssbos, buffers);
/* clear out any stale shader buffers */
if (prog->info.num_ssbos < c->MaxShaderStorageBlocks)
   st->pipe->set_shader_buffers(
 st->pipe, shader_type,
-c->MaxAtomicBuffers + prog->info.num_ssbos,
+buffer_base + prog->info.num_ssbos,
 c->MaxShaderStorageBlocks - prog->info.num_ssbos,
 NULL);
 }
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 93b5cc7c0b..a863eb29fe 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -2128,10 +2128,10 @@ glsl_to_tgsi_visitor::visit_expression(ir_expression* 
ir, st_src_reg *op)
 
case ir_unop_get_buffer_size: {
   ir_constant *const_offset = ir->operands[0]->as_constant();
+  int buf_base = ctx->st->has_hw_atomics ? 0 : 
ctx->Const.Program[shader->Stage].MaxAtomicBuffers;
   st_src_reg buffer(
 PROGRAM_BUFFER,
-ctx->Const.Program[shader->Stage].MaxAtomicBuffers +
-(const_offset ? const_offset->value.u[0] : 0),
+buf_base + (const_offset ? const_offset->value.u[0] : 0),
 GLSL_TYPE_UINT);
   if (!const_offset) {
  buffer.reladdr = ralloc(mem_ctx, st_src_reg);
@@ -3352,11 +3352,10 @@ glsl_to_tgsi_visitor::visit_ssbo_intrinsic(ir_call *ir)
ir_rvalue *offset = ((ir_instruction *)param)->as_rvalue();
 
ir_constant *const_block = block->as_constant();
-
+   int buf_base = st_context(ctx)->has_hw_atomics ? 0 : 
ctx->Const.Program[shader->Stage].MaxAtomicBuffers;
st_src_reg buffer(
  PROGRAM_BUFFER,
- ctx->Const.Program[shader->Stage].MaxAtomicBuffers +
- (const_block ? const_block->value.u[0] : 0),
+ buf_base + (const_block ? const_block->value.u[0] : 0),
  GLSL_TYPE_UINT);
 
if (!const_block) {
@@ -6581,7 +6580,10 @@ st_translate_program(
 
   assert(prog->info.num_ssbos <= frag_const->MaxShaderStorageBlocks);
   for (i = 0; i < prog->info.num_ssbos; i++) {
- unsigned index = frag_const->MaxAtomicBuffers + i;
+ unsigned index = i;
+ if (!st_context(ctx)->has_hw_atomics)
+index += frag_const->MaxAtomicBuffers;
+
  t->buffers[index] = ureg_DECL_buffer(ureg, index, false);
   }
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: Upload invariant state once at the start of the batch on Gen4-5.

2017-11-16 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 8f91aa35a54e127b68415376ef2b577ea8fc30f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f91aa35a54e127b68415376ef2b577ea8fc30f9

Author: Kenneth Graunke 
Date:   Wed Nov 15 22:40:16 2017 -0800

i965: Upload invariant state once at the start of the batch on Gen4-5.

We want to emit invariant state at the start of a render batch.  In the
past, this more or less happened: a new batch flagged BRW_NEW_CONTEXT
(because we don't have hardware contexts), which triggered the
brw_invariant_state atom.  So, it would be emitted before any 3D
drawing.  (Technically, there might be some BLT commands in the batch
because Gen4-5 have a single combined render/BLT ring, but that should
be harmless).

With the advent of BLORP, this broke.  The first item in a batch might
be a BLORP operation, which bypasses the normal draw upload path.  So,
we need to ensure invariant state happens first.  To do that, we just
upload it when creating a new batch.  On Gen6+ we'd need to worry about
whether it's a RENDER or BLT batch, but because we have a combined ring,
this approach should work fine on Gen4-5.

Seems to fix GPU hangs when playing hardware accelerated video with
mpv -hwdec=vaapi on Ironlake.

Cc: mesa-sta...@lists.freedesktop.org
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103529
Reviewed-by: Jason Ekstrand 

---

 src/mesa/drivers/dri/i965/brw_misc_state.c| 9 -
 src/mesa/drivers/dri/i965/brw_state.h | 1 -
 src/mesa/drivers/dri/i965/genX_state_upload.c | 2 --
 src/mesa/drivers/dri/i965/intel_batchbuffer.c | 4 +++-
 4 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c 
b/src/mesa/drivers/dri/i965/brw_misc_state.c
index fd96485d57..94d5c9783d 100644
--- a/src/mesa/drivers/dri/i965/brw_misc_state.c
+++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
@@ -560,15 +560,6 @@ brw_upload_invariant_state(struct brw_context *brw)
ADVANCE_BATCH();
 }
 
-const struct brw_tracked_state brw_invariant_state = {
-   .dirty = {
-  .mesa = 0,
-  .brw = BRW_NEW_BLORP |
- BRW_NEW_CONTEXT,
-   },
-   .emit = brw_upload_invariant_state
-};
-
 /**
  * Define the base addresses which some state is referenced from.
  *
diff --git a/src/mesa/drivers/dri/i965/brw_state.h 
b/src/mesa/drivers/dri/i965/brw_state.h
index cf13eca343..ad508950f7 100644
--- a/src/mesa/drivers/dri/i965/brw_state.h
+++ b/src/mesa/drivers/dri/i965/brw_state.h
@@ -51,7 +51,6 @@ extern const struct brw_tracked_state brw_wm_pull_constants;
 extern const struct brw_tracked_state brw_cs_pull_constants;
 extern const struct brw_tracked_state brw_constant_buffer;
 extern const struct brw_tracked_state brw_curbe_offsets;
-extern const struct brw_tracked_state brw_invariant_state;
 extern const struct brw_tracked_state brw_binding_table_pointers;
 extern const struct brw_tracked_state brw_depthbuffer;
 extern const struct brw_tracked_state brw_recalculate_urb_fence;
diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c 
b/src/mesa/drivers/dri/i965/genX_state_upload.c
index d4b0de850c..112f48181b 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -5366,8 +5366,6 @@ genX(init_atoms)(struct brw_context *brw)
 
   /* Command packets:
*/
-  _invariant_state,
-
   _binding_table_pointers,
   (blend_constant_color),
 
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c 
b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index bbe13f34ce..3412b1d0a5 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -601,8 +601,10 @@ brw_new_batch(struct brw_context *brw)
 * would otherwise be stored in the context (which for all intents and
 * purposes means everything).
 */
-   if (brw->hw_ctx == 0)
+   if (brw->hw_ctx == 0) {
   brw->ctx.NewDriverState |= BRW_NEW_CONTEXT;
+  brw_upload_invariant_state(brw);
+   }
 
brw->ctx.NewDriverState |= BRW_NEW_BATCH;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: enable ARB_shader_image_load_store, ARB_shader_image_size

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 8c52ece581e705e2779a0bcb2083e0a15f1fcc21
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8c52ece581e705e2779a0bcb2083e0a15f1fcc21

Author: Dave Airlie 
Date:   Wed Nov 15 10:04:11 2017 +1000

r600: enable ARB_shader_image_load_store, ARB_shader_image_size

This also enables GL4.2 for gpus with hw fp64 (cayman, cypress)

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_pipe.c | 12 +---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe.c 
b/src/gallium/drivers/r600/r600_pipe.c
index 96017dc047..a232ee46a8 100644
--- a/src/gallium/drivers/r600/r600_pipe.c
+++ b/src/gallium/drivers/r600/r600_pipe.c
@@ -332,7 +332,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
 
case PIPE_CAP_GLSL_FEATURE_LEVEL:
if (family >= CHIP_CEDAR)
-  return 410;
+  return 420;
/* pre-evergreen geom shaders need newer kernel */
if (rscreen->b.info.drm_minor >= 37)
   return 330;
@@ -362,6 +362,9 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
return family >= CHIP_CEDAR ? 0 : 1;
 
+   case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
+   return 8;
+
/* Unsupported features. */
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
@@ -409,7 +412,6 @@ static int r600_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_LOAD_CONSTBUF:
case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
case PIPE_CAP_TILE_RASTER_ORDER:
-   case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
return 0;
 
@@ -607,10 +609,14 @@ static int r600_get_shader_param(struct pipe_screen* 
pscreen,
case PIPE_SHADER_CAP_TGSI_DFRACEXP_DLDEXP_SUPPORTED:
case PIPE_SHADER_CAP_TGSI_LDEXP_SUPPORTED:
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
-   case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:
case PIPE_SHADER_CAP_LOWER_IF_THRESHOLD:
case PIPE_SHADER_CAP_TGSI_SKIP_MERGE_REGISTERS:
return 0;
+   case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:
+   if (rscreen->b.family >= CHIP_CEDAR &&
+   (shader == PIPE_SHADER_FRAGMENT))
+   return 8;
+   return 0;
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
if (rscreen->b.family >= CHIP_CEDAR && rscreen->has_atomics)
return 8;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600/sb: disable SB for images.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: f94f5c9a9f7a41f688659450d52e19e8295fce4a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f94f5c9a9f7a41f688659450d52e19e8295fce4a

Author: Dave Airlie 
Date:   Wed Nov 15 10:02:47 2017 +1000

r600/sb: disable SB for images.

Until we can work further on sb, disable it for images for now.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_shader.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index f508774ed0..b83ca11982 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -195,6 +195,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx,
use_sb &= !shader->shader.uses_doubles;
 
use_sb &= !shader->shader.uses_atomics;
+   use_sb &= !shader->shader.uses_images;
 
/* Check if the bytecode has already been built. */
if (!shader->shader.bc.bytecode) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: add core pieces of image support.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: a6b379284365e8adee780b691596d3a66de1ba93
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6b379284365e8adee780b691596d3a66de1ba93

Author: Dave Airlie 
Date:   Wed Nov 15 09:59:42 2017 +1000

r600: add core pieces of image support.

This adds the atoms and gallium api implementations,
along with support for compress/decompress paths for
shader images.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/evergreen_state.c   | 294 ++-
 src/gallium/drivers/r600/r600_blit.c |  59 ++
 src/gallium/drivers/r600/r600_hw_context.c   |   2 +
 src/gallium/drivers/r600/r600_pipe.h |  45 +++-
 src/gallium/drivers/r600/r600_shader.h   |   1 +
 src/gallium/drivers/r600/r600_state_common.c |  30 +++
 6 files changed, 428 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index c00114b628..5a3a8514ab 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -1678,6 +1678,104 @@ static void evergreen_emit_msaa_state(struct 
r600_context *rctx, int nr_samples,
}
 }
 
+static void evergreen_emit_image_state(struct r600_context *rctx, struct 
r600_atom *atom,
+  int immed_id_base, int res_id_base)
+{
+   struct r600_image_state *state = (struct r600_image_state *)atom;
+   struct pipe_framebuffer_state *fb_state = >framebuffer.state;
+   struct radeon_winsys_cs *cs = rctx->b.gfx.cs;
+   struct r600_texture *rtex;
+   struct r600_resource *resource;
+   uint32_t pkt_flags = 0;
+   int i;
+
+   for (i = 0; i < R600_MAX_IMAGES; i++) {
+   struct r600_image_view *image = >views[i];
+   unsigned reloc, immed_reloc;
+   int idx = i;
+
+   idx += fb_state->nr_cbufs + (rctx->dual_src_blend ? 1 : 0);
+   if (!image->base.resource)
+   continue;
+
+   resource = (struct r600_resource *)image->base.resource;
+   if (resource->b.b.target != PIPE_BUFFER)
+   rtex = (struct r600_texture *)image->base.resource;
+   else
+   rtex = NULL;
+
+   reloc = radeon_add_to_buffer_list(>b,
+ >b.gfx,
+ resource,
+ RADEON_USAGE_READWRITE,
+ RADEON_PRIO_SHADER_RW_BUFFER);
+
+   immed_reloc = radeon_add_to_buffer_list(>b,
+   >b.gfx,
+   resource->immed_buffer,
+   RADEON_USAGE_READWRITE,
+   
RADEON_PRIO_SHADER_RW_BUFFER);
+
+   radeon_set_context_reg_seq(cs, R_028C60_CB_COLOR0_BASE + idx * 
0x3C, 13);
+
+   radeon_emit(cs, image->cb_color_base);  /* 
R_028C60_CB_COLOR0_BASE */
+   radeon_emit(cs, image->cb_color_pitch); /* 
R_028C64_CB_COLOR0_PITCH */
+   radeon_emit(cs, image->cb_color_slice); /* 
R_028C68_CB_COLOR0_SLICE */
+   radeon_emit(cs, image->cb_color_view);  /* 
R_028C6C_CB_COLOR0_VIEW */
+   radeon_emit(cs, image->cb_color_info); /* 
R_028C70_CB_COLOR0_INFO */
+   radeon_emit(cs, image->cb_color_attrib);/* 
R_028C74_CB_COLOR0_ATTRIB */
+   radeon_emit(cs, image->cb_color_dim);   /* 
R_028C78_CB_COLOR0_DIM */
+   radeon_emit(cs, rtex ? rtex->cmask.base_address_reg : 
image->cb_color_base);/* R_028C7C_CB_COLOR0_CMASK */
+   radeon_emit(cs, rtex ? rtex->cmask.slice_tile_max : 0); /* 
R_028C80_CB_COLOR0_CMASK_SLICE */
+   radeon_emit(cs, image->cb_color_fmask); /* 
R_028C84_CB_COLOR0_FMASK */
+   radeon_emit(cs, image->cb_color_fmask_slice); /* 
R_028C88_CB_COLOR0_FMASK_SLICE */
+   radeon_emit(cs, rtex ? rtex->color_clear_value[0] : 0); /* 
R_028C8C_CB_COLOR0_CLEAR_WORD0 */
+   radeon_emit(cs, rtex ? rtex->color_clear_value[1] : 0); /* 
R_028C90_CB_COLOR0_CLEAR_WORD1 */
+
+   radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); /* 
R_028C60_CB_COLOR0_BASE */
+   radeon_emit(cs, reloc);
+
+   radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); /* 
R_028C74_CB_COLOR0_ATTRIB */
+   radeon_emit(cs, reloc);
+
+   radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); /* 
R_028C7C_CB_COLOR0_CMASK */
+   radeon_emit(cs, reloc);
+
+   radeon_emit(cs, PKT3(PKT3_NOP, 0, 0)); /* 
R_028C84_CB_COLOR0_FMASK */
+   radeon_emit(cs, reloc);
+
+   

Mesa (master): r600: implement basic memory barrier.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 894e2deb7edcf8c578b8cbd98cd9a83b8c8a332f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=894e2deb7edcf8c578b8cbd98cd9a83b8c8a332f

Author: Dave Airlie 
Date:   Wed Nov 15 09:48:29 2017 +1000

r600: implement basic memory barrier.

This isn't 100% perfect (fglrx also fails a bunch of those tests)
but implement the start of a memory barrier for image support.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_pipe_common.c  |  5 -
 src/gallium/drivers/r600/r600_state_common.c | 24 
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_pipe_common.c 
b/src/gallium/drivers/r600/r600_pipe_common.c
index e2d0e32bb2..23f7d74ce0 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.c
+++ b/src/gallium/drivers/r600/r600_pipe_common.c
@@ -321,10 +321,6 @@ void r600_need_dma_space(struct r600_common_context *ctx, 
unsigned num_dw,
ctx->num_dma_calls++;
 }
 
-static void r600_memory_barrier(struct pipe_context *ctx, unsigned flags)
-{
-}
-
 void r600_preflush_suspend_features(struct r600_common_context *ctx)
 {
/* suspend queries */
@@ -664,7 +660,6 @@ bool r600_common_context_init(struct r600_common_context 
*rctx,
rctx->b.transfer_flush_region = u_transfer_flush_region_vtbl;
rctx->b.transfer_unmap = u_transfer_unmap_vtbl;
rctx->b.texture_subdata = u_default_texture_subdata;
-   rctx->b.memory_barrier = r600_memory_barrier;
rctx->b.flush = r600_flush_from_st;
rctx->b.set_debug_callback = r600_set_debug_callback;
rctx->b.fence_server_sync = r600_fence_server_sync;
diff --git a/src/gallium/drivers/r600/r600_state_common.c 
b/src/gallium/drivers/r600/r600_state_common.c
index ead5b86e0c..4ae18fc14c 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -91,6 +91,29 @@ void r600_emit_alphatest_state(struct r600_context *rctx, 
struct r600_atom *atom
radeon_set_context_reg(cs, R_028438_SX_ALPHA_REF, alpha_ref);
 }
 
+static void r600_memory_barrier(struct pipe_context *ctx, unsigned flags)
+{
+   struct r600_context *rctx = (struct r600_context *)ctx;
+   if (flags & PIPE_BARRIER_CONSTANT_BUFFER)
+   rctx->b.flags |= R600_CONTEXT_INV_CONST_CACHE;
+
+   if (flags & (PIPE_BARRIER_VERTEX_BUFFER |
+PIPE_BARRIER_SHADER_BUFFER |
+PIPE_BARRIER_TEXTURE |
+PIPE_BARRIER_IMAGE |
+PIPE_BARRIER_STREAMOUT_BUFFER |
+PIPE_BARRIER_GLOBAL_BUFFER)) {
+   rctx->b.flags |= R600_CONTEXT_INV_VERTEX_CACHE|
+   R600_CONTEXT_INV_TEX_CACHE;
+   }
+
+   if (flags & (PIPE_BARRIER_FRAMEBUFFER|
+PIPE_BARRIER_IMAGE))
+   rctx->b.flags |= R600_CONTEXT_FLUSH_AND_INV;
+
+   rctx->b.flags |= R600_CONTEXT_WAIT_3D_IDLE;
+}
+
 static void r600_texture_barrier(struct pipe_context *ctx, unsigned flags)
 {
struct r600_context *rctx = (struct r600_context *)ctx;
@@ -3014,6 +3037,7 @@ void r600_init_common_state_functions(struct r600_context 
*rctx)
rctx->b.b.set_vertex_buffers = r600_set_vertex_buffers;
rctx->b.b.set_sampler_views = r600_set_sampler_views;
rctx->b.b.sampler_view_destroy = r600_sampler_view_destroy;
+   rctx->b.b.memory_barrier = r600_memory_barrier;
rctx->b.b.texture_barrier = r600_texture_barrier;
rctx->b.b.set_stream_output_targets = r600_set_streamout_targets;
rctx->b.b.set_active_query_state = r600_set_active_query_state;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600/shader: add flag to denote if shader uses images

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: c119a1acb33866c72cc1592b9bbf418e82cbab2a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c119a1acb33866c72cc1592b9bbf418e82cbab2a

Author: Dave Airlie 
Date:   Wed Nov 15 09:54:24 2017 +1000

r600/shader: add flag to denote if shader uses images

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_shader.c | 1 +
 src/gallium/drivers/r600/r600_shader.h | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index b1a164e594..919685ca6a 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -2971,6 +2971,7 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
shader->uses_atomics = ctx.info.file_mask[TGSI_FILE_HW_ATOMIC];
shader->nsys_inputs = 0;
 
+   shader->uses_images = ctx.info.file_count[TGSI_FILE_IMAGE] > 0;
indirect_gprs = ctx.info.indirect_files & ~((1 << TGSI_FILE_CONSTANT) | 
(1 << TGSI_FILE_SAMPLER));
tgsi_parse_init(, tokens);
ctx.type = ctx.info.processor;
diff --git a/src/gallium/drivers/r600/r600_shader.h 
b/src/gallium/drivers/r600/r600_shader.h
index 40719d9be5..c6efbb9852 100644
--- a/src/gallium/drivers/r600/r600_shader.h
+++ b/src/gallium/drivers/r600/r600_shader.h
@@ -116,6 +116,7 @@ struct r600_shader {
 
boolean uses_doubles;
boolean uses_atomics;
+   boolean uses_images;
uint8_t atomic_base;
 };
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: update features/ relnotes for r600 shader image support. (v2)

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 59162c122f29884e555e579ca99f5417bc0f4b33
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=59162c122f29884e555e579ca99f5417bc0f4b33

Author: Dave Airlie 
Date:   Wed Nov 15 10:07:03 2017 +1000

docs: update features/relnotes for r600 shader image support. (v2)

v2: update GLES

Signed-off-by: Dave Airlie 

---

 docs/features.txt | 18 +-
 docs/relnotes/17.4.0.html |  2 ++
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index 86d07ba80b..29a96884e8 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -146,19 +146,19 @@ GL 4.1, GLSL 4.10 --- all DONE: i965/gen7+, nvc0, r600, 
radeonsi
   GL_ARB_viewport_array DONE (i965, nv50, 
llvmpipe, softpipe)
 
 
-GL 4.2, GLSL 4.20 -- all DONE: i965/gen7+, nvc0, radeonsi
+GL 4.2, GLSL 4.20 -- all DONE: i965/gen7+, nvc0, r600, radeonsi
 
-  GL_ARB_texture_compression_bptc   DONE (i965, r600)
+  GL_ARB_texture_compression_bptc   DONE (i965)
   GL_ARB_compressed_texture_pixel_storage   DONE (all drivers)
-  GL_ARB_shader_atomic_counters DONE (i965, r600, 
softpipe)
+  GL_ARB_shader_atomic_counters DONE (i965, softpipe)
   GL_ARB_texture_storageDONE (all drivers)
-  GL_ARB_transform_feedback_instanced   DONE (i965, nv50, 
r600, llvmpipe, softpipe, swr)
-  GL_ARB_base_instance  DONE (i965, nv50, 
r600, llvmpipe, softpipe, swr)
+  GL_ARB_transform_feedback_instanced   DONE (i965, nv50, 
llvmpipe, softpipe, swr)
+  GL_ARB_base_instance  DONE (i965, nv50, 
llvmpipe, softpipe, swr)
   GL_ARB_shader_image_load_storeDONE (i965, softpipe)
   GL_ARB_conservative_depth DONE (all drivers that 
support GLSL 1.30)
   GL_ARB_shading_language_420pack   DONE (all drivers that 
support GLSL 1.30)
   GL_ARB_shading_language_packing   DONE (all drivers)
-  GL_ARB_internalformat_query   DONE (i965, nv50, 
r600, llvmpipe, softpipe, swr)
+  GL_ARB_internalformat_query   DONE (i965, nv50, 
llvmpipe, softpipe, swr)
   GL_ARB_map_buffer_alignment   DONE (all drivers)
 
 
@@ -178,7 +178,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0, radeonsi
   GL_ARB_multi_draw_indirectDONE (i965, r600, 
llvmpipe, softpipe, swr)
   GL_ARB_program_interface_queryDONE (all drivers)
   GL_ARB_robust_buffer_access_behavior  DONE (i965)
-  GL_ARB_shader_image_size  DONE (i965, softpipe)
+  GL_ARB_shader_image_size  DONE (i965, r600, 
softpipe)
   GL_ARB_shader_storage_buffer_object   DONE (i965, softpipe)
   GL_ARB_stencil_texturing  DONE (i965/hsw+, nv50, 
r600, llvmpipe, softpipe, swr)
   GL_ARB_texture_buffer_range   DONE (nv50, i965, 
r600, llvmpipe)
@@ -247,8 +247,8 @@ GLES3.1, GLSL ES 3.1 -- all DONE: i965/hsw+, nvc0, radeonsi
   GL_ARB_framebuffer_no_attachments DONE (i965/gen7+, 
r600, softpipe)
   GL_ARB_program_interface_queryDONE (all drivers)
   GL_ARB_shader_atomic_counters DONE (i965/gen7+, 
r600, softpipe)
-  GL_ARB_shader_image_load_storeDONE (i965/gen7+, 
softpipe)
-  GL_ARB_shader_image_size  DONE (i965/gen7+, 
softpipe)
+  GL_ARB_shader_image_load_storeDONE (i965/gen7+, 
r600, softpipe)
+  GL_ARB_shader_image_size  DONE (i965/gen7+, 
r600, softpipe)
   GL_ARB_shader_storage_buffer_object   DONE (i965/gen7+, 
softpipe)
   GL_ARB_shading_language_packing   DONE (all drivers)
   GL_ARB_separate_shader_objectsDONE (all drivers)
diff --git a/docs/relnotes/17.4.0.html b/docs/relnotes/17.4.0.html
index 19e0c8073d..12a4864365 100644
--- a/docs/relnotes/17.4.0.html
+++ b/docs/relnotes/17.4.0.html
@@ -46,6 +46,8 @@ Note: some of the new features are only available with 
certain drivers.
 
 Disk shader cache support for i965 when MESA_GLSL_CACHE_DISABLE 
environment variable is set to "0" or "false"
 GL_ARB_shader_atomic_counters and GL_ARB_shader_atomic_counter_ops on 
r600/evergreen+
+GL_ARB_shader_image_load_store and GL_ARB_shader_image_size on 
r600/evergreen+
+OpenGL 4.2 on r600/evergreen with hw fp64 support
 
 
 Bug fixes

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: handle image size support.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 31db4a3200b3ff2fe9521c62c16ea363d9faea2e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=31db4a3200b3ff2fe9521c62c16ea363d9faea2e

Author: Dave Airlie 
Date:   Wed Nov 15 10:03:32 2017 +1000

r600: handle image size support.

This adds support for the RESQ opcode with the workaround
required due to hw bugs for buffers and cube arrays.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_shader.c   | 78 ++--
 src/gallium/drivers/r600/r600_shader.h   |  2 +
 src/gallium/drivers/r600/r600_state_common.c | 30 +--
 3 files changed, 101 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index b83ca11982..9d0e625295 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -3077,6 +3077,7 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
shader->two_side = key.ps.color_two_side;
shader->atomic_base = key.ps.first_atomic_counter;
shader->rat_base = key.ps.nr_cbufs;
+   shader->image_size_const_offset = 
key.ps.image_size_const_offset;
break;
default:
break;
@@ -6805,12 +6806,12 @@ static int do_vtx_fetch_inst(struct r600_shader_ctx 
*ctx, boolean src_requires_l
return 0;
 }
 
-static int r600_do_buffer_txq(struct r600_shader_ctx *ctx)
+static int r600_do_buffer_txq(struct r600_shader_ctx *ctx, int reg_idx, int 
offset)
 {
struct tgsi_full_instruction *inst = 
>parse.FullToken.FullInstruction;
struct r600_bytecode_alu alu;
int r;
-   int id = tgsi_tex_get_src_gpr(ctx, 1);
+   int id = tgsi_tex_get_src_gpr(ctx, reg_idx) + offset;
 
memset(, 0, sizeof(struct r600_bytecode_alu));
alu.op = ALU_OP1_MOV;
@@ -6887,7 +6888,7 @@ static int tgsi_tex(struct r600_shader_ctx *ctx)
if (inst->Texture.Texture == TGSI_TEXTURE_BUFFER) {
if (inst->Instruction.Opcode == TGSI_OPCODE_TXQ) {
ctx->shader->uses_tex_buffers = true;
-   return r600_do_buffer_txq(ctx);
+   return r600_do_buffer_txq(ctx, 1, 0);
}
else if (inst->Instruction.Opcode == TGSI_OPCODE_TXF) {
if (ctx->bc->chip_class < EVERGREEN)
@@ -8198,6 +8199,73 @@ static int tgsi_atomic_op(struct r600_shader_ctx *ctx)
return 0;
 }
 
+static int tgsi_resq(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
>parse.FullToken.FullInstruction;
+   unsigned sampler_index_mode;
+   struct r600_bytecode_tex tex;
+   int r;
+   boolean has_txq_cube_array_z = false;
+
+   if (inst->Memory.Texture == TGSI_TEXTURE_BUFFER) {
+   ctx->shader->uses_tex_buffers = true;
+   return r600_do_buffer_txq(ctx, 0, 
ctx->shader->image_size_const_offset);
+   }
+
+   if (inst->Memory.Texture == TGSI_TEXTURE_CUBE_ARRAY &&
+   inst->Dst[0].Register.WriteMask & 4) {
+   ctx->shader->has_txq_cube_array_z_comp = true;
+   has_txq_cube_array_z = true;
+   }
+
+   sampler_index_mode = inst->Src[0].Indirect.Index == 2 ? 2 : 0; // 
CF_INDEX_1 : CF_INDEX_NONE
+   if (sampler_index_mode)
+   egcm_load_index_reg(ctx->bc, 1, false);
+
+
+   /* does this shader want a num layers from TXQ for a cube array? */
+   if (has_txq_cube_array_z) {
+   int id = tgsi_tex_get_src_gpr(ctx, 0) + 
ctx->shader->image_size_const_offset;
+   struct r600_bytecode_alu alu;
+
+   memset(, 0, sizeof(struct r600_bytecode_alu));
+   alu.op = ALU_OP1_MOV;
+
+   alu.src[0].sel = R600_SHADER_BUFFER_INFO_SEL;
+   /* channel 1 or 3 of each word */
+   alu.src[0].sel += (id / 2);
+   alu.src[0].chan = ((id % 2) * 2) + 1;
+   alu.src[0].kc_bank = R600_BUFFER_INFO_CONST_BUFFER;
+   tgsi_dst(ctx, >Dst[0], 2, );
+   alu.last = 1;
+   r = r600_bytecode_add_alu(ctx->bc, );
+   if (r)
+   return r;
+   /* disable writemask from texture instruction */
+   inst->Dst[0].Register.WriteMask &= ~4;
+   }
+   memset(, 0, sizeof(struct r600_bytecode_tex));
+   tex.op = ctx->inst_info->op;
+   tex.sampler_id = R600_IMAGE_REAL_RESOURCE_OFFSET + 
inst->Src[0].Register.Index;
+   tex.sampler_index_mode = sampler_index_mode;
+   tex.resource_id = tex.sampler_id;
+   tex.resource_index_mode = sampler_index_mode;
+   tex.src_sel_x = 4;
+   tex.src_sel_y = 4;
+   tex.src_sel_z = 4;
+   tex.src_sel_w = 4;
+   tex.dst_sel_x = (inst->Dst[0].Register.WriteMask & 1) ? 0 : 7;
+  

Mesa (master): r600: allocate immed buffer resource for images.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: ac4f175d79c85fd4910f99ef945069ff681bd7fd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ac4f175d79c85fd4910f99ef945069ff681bd7fd

Author: Dave Airlie 
Date:   Wed Nov 15 09:47:03 2017 +1000

r600: allocate immed buffer resource for images.

In order to image readback we have to execute a MEM_RAT instruction
that needs a buffer to transfer the result into until the shader
can fetch it.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_buffer_common.c |  2 ++
 src/gallium/drivers/r600/r600_pipe_common.h   |  9 +
 src/gallium/drivers/r600/r600_texture.c   | 10 ++
 3 files changed, 21 insertions(+)

diff --git a/src/gallium/drivers/r600/r600_buffer_common.c 
b/src/gallium/drivers/r600/r600_buffer_common.c
index a6e3b7fcf1..35a702341a 100644
--- a/src/gallium/drivers/r600/r600_buffer_common.c
+++ b/src/gallium/drivers/r600/r600_buffer_common.c
@@ -251,6 +251,7 @@ static void r600_buffer_destroy(struct pipe_screen *screen,
 
threaded_resource_deinit(buf);
util_range_destroy(>valid_buffer_range);
+   pipe_resource_reference((struct pipe_resource**)>immed_buffer, 
NULL);
pb_reference(>buf, NULL);
FREE(rbuffer);
 }
@@ -606,6 +607,7 @@ r600_alloc_buffer_struct(struct pipe_screen *screen,
 
rbuffer->buf = NULL;
rbuffer->bind_history = 0;
+   rbuffer->immed_buffer = NULL;
util_range_init(>valid_buffer_range);
return rbuffer;
 }
diff --git a/src/gallium/drivers/r600/r600_pipe_common.h 
b/src/gallium/drivers/r600/r600_pipe_common.h
index a6406cfdb2..c8b971a5e4 100644
--- a/src/gallium/drivers/r600/r600_pipe_common.h
+++ b/src/gallium/drivers/r600/r600_pipe_common.h
@@ -171,6 +171,12 @@ struct r600_resource {
/* Whether this resource is referenced by bindless handles. */
booltexture_handle_allocated;
boolimage_handle_allocated;
+
+   /*
+* EG/Cayman only - for RAT operations hw need an immediate buffer
+* to store results in.
+*/
+   struct r600_resource*immed_buffer;
 };
 
 struct r600_transfer {
@@ -773,6 +779,9 @@ void evergreen_do_fast_color_clear(struct 
r600_common_context *rctx,
   const union pipe_color_union *color);
 void r600_init_screen_texture_functions(struct r600_common_screen *rscreen);
 void r600_init_context_texture_functions(struct r600_common_context *rctx);
+void eg_resource_alloc_immed(struct r600_common_screen *rscreen,
+struct r600_resource *res,
+unsigned immed_size);
 
 /* r600_viewport.c */
 void evergreen_apply_scissor_bug_workaround(struct r600_common_context *rctx,
diff --git a/src/gallium/drivers/r600/r600_texture.c 
b/src/gallium/drivers/r600/r600_texture.c
index 3515d979d9..ee6ed64b9f 100644
--- a/src/gallium/drivers/r600/r600_texture.c
+++ b/src/gallium/drivers/r600/r600_texture.c
@@ -559,6 +559,7 @@ static void r600_texture_destroy(struct pipe_screen *screen,
struct r600_resource *resource = >resource;
 
r600_texture_reference(>flushed_depth_texture, NULL);
+   pipe_resource_reference((struct 
pipe_resource**)>immed_buffer, NULL);
 
if (rtex->cmask_buffer != >resource) {
r600_resource_reference(>cmask_buffer, NULL);
@@ -718,6 +719,15 @@ static void r600_texture_alloc_cmask_separate(struct 
r600_common_screen *rscreen
p_atomic_inc(>compressed_colortex_counter);
 }
 
+void eg_resource_alloc_immed(struct r600_common_screen *rscreen,
+struct r600_resource *res,
+unsigned immed_size)
+{
+   res->immed_buffer = (struct r600_resource *)
+   pipe_buffer_create(>b, PIPE_BIND_CUSTOM,
+  PIPE_USAGE_DEFAULT, immed_size);
+}
+
 static void r600_texture_get_htile_size(struct r600_common_screen *rscreen,
struct r600_texture *rtex)
 {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600: handle writes_memory properly

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 77d36cbc8de85ea5c4e8caf071cbc6661e0cd75c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=77d36cbc8de85ea5c4e8caf071cbc6661e0cd75c

Author: Dave Airlie 
Date:   Wed Nov 15 09:46:01 2017 +1000

r600: handle writes_memory properly

This implements proper handling for shaders with side effects.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/evergreen_state.c | 10 +++---
 src/gallium/drivers/r600/evergreend.h  |  6 ++
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/r600/evergreen_state.c 
b/src/gallium/drivers/r600/evergreen_state.c
index 2cd162629d..c00114b628 100644
--- a/src/gallium/drivers/r600/evergreen_state.c
+++ b/src/gallium/drivers/r600/evergreen_state.c
@@ -3173,8 +3173,12 @@ void evergreen_update_ps_state(struct pipe_context *ctx, 
struct r600_pipe_shader
db_shader_control |= S_02880C_STENCIL_EXPORT_ENABLE(stencil_export);
db_shader_control |= S_02880C_MASK_EXPORT_ENABLE(mask_export);
 
-   if 
(shader->selector->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL])
-   db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1);
+   if 
(shader->selector->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL]) {
+   db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1) |
+   
S_02880C_EXEC_ON_NOOP(shader->selector->info.writes_memory);
+   } else if (shader->selector->info.writes_memory) {
+   db_shader_control |= S_02880C_EXEC_ON_HIER_FAIL(1);
+   }
 
switch (rshader->ps_conservative_z) {
default: /* fall through */
@@ -3498,7 +3502,7 @@ void evergreen_update_db_shader_control(struct 
r600_context * rctx)
 * get a hang unless you flush the DB in between.  For now just use
 * LATE_Z.
 */
-   if (rctx->alphatest_state.sx_alpha_test_control) {
+   if (rctx->alphatest_state.sx_alpha_test_control || 
rctx->ps_shader->info.writes_memory) {
db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z);
} else {
db_shader_control |= 
S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
diff --git a/src/gallium/drivers/r600/evergreend.h 
b/src/gallium/drivers/r600/evergreend.h
index af79bb74e6..f8a256ca52 100644
--- a/src/gallium/drivers/r600/evergreend.h
+++ b/src/gallium/drivers/r600/evergreend.h
@@ -988,6 +988,12 @@
 #define   S_02880C_DUAL_EXPORT_ENABLE(x)   (((unsigned)(x) & 0x1) 
<< 9)
 #define   G_02880C_DUAL_EXPORT_ENABLE(x)   (((x) >> 9) & 0x1)
 #define   C_02880C_DUAL_EXPORT_ENABLE  0xFDFF
+#define   S_02880C_EXEC_ON_HIER_FAIL(x)(((unsigned)(x) & 0x1) 
<< 10)
+#define   G_02880C_EXEC_ON_HIER_FAIL(x)(((x) >> 10) & 0x1)
+#define   C_02880C_EXEC_ON_HIER_FAIL   0xFBFF
+#define   S_02880C_EXEC_ON_NOOP(x) (((unsigned)(x) & 0x1) 
<< 11)
+#define   G_02880C_EXEC_ON_NOOP(x) (((x) >> 11) & 0x1)
+#define   C_02880C_EXEC_ON_NOOP0xF7FF
 #define   S_02880C_DB_SOURCE_FORMAT(x) (((unsigned)(x) & 0x3) 
<< 13)
 #define   G_02880C_DB_SOURCE_FORMAT(x) (((x) >> 13) & 0x3)
 #define   C_02880C_DB_SOURCE_FORMAT0x9FFF

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600/shader: implement getting thread id.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 5689bb00229a422267ada6aef770dacc81e3319e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5689bb00229a422267ada6aef770dacc81e3319e

Author: Dave Airlie 
Date:   Wed Nov 15 09:51:36 2017 +1000

r600/shader: implement getting thread id.

We need the thread id to use the immediate buffer readback
mechanism, so add support for calculating it.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_shader.c | 74 ++
 1 file changed, 74 insertions(+)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index 919685ca6a..b351c8904c 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -353,6 +353,7 @@ struct r600_shader_ctx {
unsignedenabled_stream_buffers_mask;
unsignedtess_input_info; /* temp with 
tess input offsets */
unsignedtess_output_info; /* temp with 
tess input offsets */
+   unsignedthread_id_gpr; /* temp with 
thread id calculated for images */
 };
 
 struct r600_shader_tgsi_instruction {
@@ -2935,6 +2936,69 @@ static int r600_emit_tess_factor(struct r600_shader_ctx 
*ctx)
return 0;
 }
 
+/*
+ * We have to work out the thread ID for load and atomic
+ * operations, which store the returned value to an index
+ * in an intermediate buffer.
+ * The index is calculated by taking the thread id,
+ * calculated from the MBCNT instructions.
+ * Then the shader engine ID is multiplied by 256,
+ * and the wave id is added.
+ * Then the result is multipled by 64 and thread id is
+ * added.
+ */
+static int load_thread_id_gpr(struct r600_shader_ctx *ctx)
+{
+   struct r600_bytecode_alu alu;
+   int r;
+
+   memset(, 0, sizeof(struct r600_bytecode_alu));
+   alu.op = ALU_OP1_MBCNT_32LO_ACCUM_PREV_INT;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.chan = 0;
+   alu.src[0].sel = V_SQ_ALU_SRC_LITERAL;
+   alu.src[0].value = 0x;
+   alu.dst.write = 1;
+   r = r600_bytecode_add_alu(ctx->bc, );
+   if (r)
+   return r;
+
+   memset(, 0, sizeof(struct r600_bytecode_alu));
+   alu.op = ALU_OP1_MBCNT_32HI_INT;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.chan = 1;
+   alu.src[0].sel = V_SQ_ALU_SRC_LITERAL;
+   alu.src[0].value = 0x;
+   alu.dst.write = 1;
+   r = r600_bytecode_add_alu(ctx->bc, );
+   if (r)
+   return r;
+
+   memset(, 0, sizeof(struct r600_bytecode_alu));
+   alu.op = ALU_OP3_MULADD_UINT24;
+   alu.dst.sel = ctx->temp_reg;
+   alu.dst.chan = 2;
+   alu.src[0].sel = EG_V_SQ_ALU_SRC_SE_ID;
+   alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
+   alu.src[1].value = 256;
+   alu.src[2].sel = EG_V_SQ_ALU_SRC_HW_WAVE_ID;
+   alu.dst.write = 1;
+   alu.is_op3 = 1;
+   alu.last = 1;
+   r = r600_bytecode_add_alu(ctx->bc, );
+   if (r)
+   return r;
+
+   r = single_alu_op3(ctx, ALU_OP3_MULADD_UINT24,
+  ctx->thread_id_gpr, 1,
+  ctx->temp_reg, 2,
+  V_SQ_ALU_SRC_LITERAL, 0x40,
+  ctx->temp_reg, 0);
+   if (r)
+   return r;
+   return 0;
+}
+
 static int r600_shader_from_tgsi(struct r600_context *rctx,
 struct r600_pipe_shader *pipeshader,
 union r600_shader_key key)
@@ -3138,6 +3202,12 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
ctx.temp_reg = ctx.bc->ar_reg + 3;
}
 
+   if (shader->uses_images && ctx.type == PIPE_SHADER_FRAGMENT) {
+   ctx.thread_id_gpr = ctx.temp_reg;
+   ctx.temp_reg++;
+   } else
+   ctx.thread_id_gpr = 0;
+
shader->max_arrays = 0;
shader->num_arrays = 0;
if (indirect_gprs) {
@@ -3281,6 +3351,10 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
}
}
 
+   if (ctx.thread_id_gpr) {
+   load_thread_id_gpr();
+   }
+
if (ctx.type == PIPE_SHADER_GEOMETRY) {
struct r600_bytecode_alu alu;
int r;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): r600/shader: add support for load/store/ atomic ops on images.

2017-11-16 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: aa38bf658f1e0dd166b3ce12025533775f373788
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa38bf658f1e0dd166b3ce12025533775f373788

Author: Dave Airlie 
Date:   Wed Nov 15 10:01:56 2017 +1000

r600/shader: add support for load/store/atomic ops on images.

This adds support to the shader assembler for load/store/atomic
ops on images which are handled via the RAT operations.

Tested-By: Gert Wollny 
Signed-off-by: Dave Airlie 

---

 src/gallium/drivers/r600/r600_shader.c | 319 -
 1 file changed, 315 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c 
b/src/gallium/drivers/r600/r600_shader.c
index b351c8904c..f508774ed0 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -969,6 +969,7 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
case TGSI_FILE_SAMPLER:
case TGSI_FILE_SAMPLER_VIEW:
case TGSI_FILE_ADDRESS:
+   case TGSI_FILE_IMAGE:
break;
 
case TGSI_FILE_HW_ATOMIC:
@@ -3074,6 +3075,7 @@ static int r600_shader_from_tgsi(struct r600_context 
*rctx,
case PIPE_SHADER_FRAGMENT:
shader->two_side = key.ps.color_two_side;
shader->atomic_base = key.ps.first_atomic_counter;
+   shader->rat_base = key.ps.nr_cbufs;
break;
default:
break;
@@ -7775,14 +,321 @@ static int tgsi_load_gds(struct r600_shader_ctx *ctx)
return 0;
 }
 
+/* this fixes up 1D arrays properly */
+static int load_index_src(struct r600_shader_ctx *ctx, int src_index, int 
*idx_gpr)
+{
+   struct tgsi_full_instruction *inst = 
>parse.FullToken.FullInstruction;
+   int r, i;
+   struct r600_bytecode_alu alu;
+   int temp_reg = r600_get_temp(ctx);
+
+   for (i = 0; i < 4; i++) {
+   bool def_val = true, write_zero = false;
+   memset(, 0, sizeof(struct r600_bytecode_alu));
+   alu.op = ALU_OP1_MOV;
+   alu.dst.sel = temp_reg;
+   alu.dst.chan = i;
+
+   switch (inst->Memory.Texture) {
+   case TGSI_TEXTURE_BUFFER:
+   case TGSI_TEXTURE_1D:
+   if (i == 1 || i == 2 || i == 3) {
+   write_zero = true;
+   }
+   break;
+   case TGSI_TEXTURE_1D_ARRAY:
+   if (i == 1 || i == 3)
+   write_zero = true;
+   else if (i == 2) {
+   r600_bytecode_src([0], 
>src[src_index], 1);
+   def_val = false;
+   }
+   break;
+   case TGSI_TEXTURE_2D:
+   if (i == 2 || i == 3)
+   write_zero = true;
+   break;
+   default:
+   if (i == 3)
+   write_zero = true;
+   break;
+   }
+
+   if (write_zero) {
+   alu.src[0].sel = V_SQ_ALU_SRC_LITERAL;
+   alu.src[0].value = 0;
+   } else if (def_val) {
+   r600_bytecode_src([0], >src[src_index], i);
+   }
+
+   if (i == 3)
+   alu.last = 1;
+   alu.dst.write = 1;
+   r = r600_bytecode_add_alu(ctx->bc, );
+   if (r)
+   return r;
+   }
+   *idx_gpr = temp_reg;
+   return 0;
+}
+
+static int tgsi_load_rat(struct r600_shader_ctx *ctx)
+{
+   struct tgsi_full_instruction *inst = 
>parse.FullToken.FullInstruction;
+   /* have to work out the offset into the RAT immediate return buffer */
+   struct r600_bytecode_vtx vtx;
+   struct r600_bytecode_cf *cf;
+   int r;
+   int idx_gpr;
+   unsigned format, num_format, format_comp, endian;
+   const struct util_format_description *desc;
+   unsigned rat_index_mode;
+   unsigned immed_base;
+
+   rat_index_mode = inst->Src[0].Indirect.Index == 2 ? 2 : 0; // 
CF_INDEX_1 : CF_INDEX_NONE
+
+   immed_base = R600_IMAGE_IMMED_RESOURCE_OFFSET;
+   r = load_index_src(ctx, 1, _gpr);
+   if (r)
+   return r;
+
+   if (rat_index_mode)
+   egcm_load_index_reg(ctx->bc, 1, false);
+
+   r600_bytecode_add_cfinst(ctx->bc, CF_OP_MEM_RAT);
+   cf = ctx->bc->cf_last;
+
+   cf->rat.id = ctx->shader->rat_base + inst->Src[0].Register.Index;
+   cf->rat.inst = V_RAT_INST_NOP_RTN;
+   cf->rat.index_mode = rat_index_mode;
+   cf->output.type = V_SQ_CF_ALLOC_EXPORT_WORD0_SQ_EXPORT_READ_IND;
+   cf->output.gpr = ctx->thread_id_gpr;
+   cf->output.index_gpr = idx_gpr;
+   

Mesa (master): autotools: set XA versions in configure.ac and configure header file

2017-11-16 Thread Dylan Baker
Module: Mesa
Branch: master
Commit: 65fc16c97413edeef508e0bfc4b0ceb4e430c1fe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=65fc16c97413edeef508e0bfc4b0ceb4e430c1fe

Author: Dylan Baker 
Date:   Mon Oct 30 16:52:29 2017 -0700

autotools: set XA versions in configure.ac and configure header file

Currently the versions are set in the header, and then sed is used to
extract them, so that autotools can use them elsewhere.

This is odd. Autotools is perfectly capable of configuring the header
with the versions, and then they don't need to be extracted from the
the header. This is cleaner and more obvious.

Tested with make distcheck.

v2: - Split tiny -> patch change
- Drop temporary variables
- change XA_VERSION_* -> XA_*
v3: - Finish splitting the tiny -> patch change

Signed-off-by: Dylan Baker 
Reviewed-by: Emil Velikov 
Reviewed-by: Matt Turner  (v2)

---

 configure.ac | 12 
 .../state_trackers/xa/{xa_tracker.h => xa_tracker.h.in}  |  6 +++---
 2 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/configure.ac b/configure.ac
index a7ae920ab9..300ee1a89e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2864,14 +2864,9 @@ AM_CONDITIONAL(HAVE_VULKAN_COMMON, test 
"x$VULKAN_DRIVERS" != "x")
 AC_SUBST([XVMC_MAJOR], 1)
 AC_SUBST([XVMC_MINOR], 0)
 
-XA_HEADER="$srcdir/src/gallium/state_trackers/xa/xa_tracker.h"
-XA_MAJOR=`grep "#define XA_TRACKER_VERSION_MAJOR" $XA_HEADER | $SED 
's/^#define XA_TRACKER_VERSION_MAJOR //'`
-XA_MINOR=`grep "#define XA_TRACKER_VERSION_MINOR" $XA_HEADER | $SED 
's/^#define XA_TRACKER_VERSION_MINOR //'`
-XA_TINY=`grep "#define XA_TRACKER_VERSION_PATCH" $XA_HEADER | $SED 's/^#define 
XA_TRACKER_VERSION_PATCH //'`
-
-AC_SUBST([XA_MAJOR], $XA_MAJOR)
-AC_SUBST([XA_MINOR], $XA_MINOR)
-AC_SUBST([XA_TINY], $XA_TINY)
+AC_SUBST([XA_MAJOR], 2)
+AC_SUBST([XA_MINOR], 3)
+AC_SUBST([XA_TINY], 0)
 AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
 
 AC_ARG_ENABLE(valgrind,
@@ -2954,6 +2949,7 @@ AC_CONFIG_FILES([Makefile
  src/gallium/state_trackers/va/Makefile
  src/gallium/state_trackers/vdpau/Makefile
  src/gallium/state_trackers/xa/Makefile
+ src/gallium/state_trackers/xa/xa_tracker.h
  src/gallium/state_trackers/xvmc/Makefile
  src/gallium/targets/d3dadapter9/Makefile
  src/gallium/targets/d3dadapter9/d3d.pc
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h 
b/src/gallium/state_trackers/xa/xa_tracker.h.in
similarity index 98%
rename from src/gallium/state_trackers/xa/xa_tracker.h
rename to src/gallium/state_trackers/xa/xa_tracker.h.in
index 44b3eb5cbe..26c4f21d0f 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h
+++ b/src/gallium/state_trackers/xa/xa_tracker.h.in
@@ -36,9 +36,9 @@
 
 #include 
 
-#define XA_TRACKER_VERSION_MAJOR 2
-#define XA_TRACKER_VERSION_MINOR 3
-#define XA_TRACKER_VERSION_PATCH 0
+#define XA_TRACKER_VERSION_MAJOR @XA_MAJOR@
+#define XA_TRACKER_VERSION_MINOR @XA_MINOR@
+#define XA_TRACKER_VERSION_PATCH @XA_TINY@
 
 #define XA_FLAG_SHARED (1 << 0)
 #define XA_FLAG_RENDER_TARGET  (1 << 1)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): autotools: change version TINY -> PATCH

2017-11-16 Thread Dylan Baker
Module: Mesa
Branch: master
Commit: d8acf79f0c296d004977dc500ca1b6e7cd0b56da
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d8acf79f0c296d004977dc500ca1b6e7cd0b56da

Author: Dylan Baker 
Date:   Mon Nov  6 16:38:06 2017 -0800

autotools: change version TINY -> PATCH

Because patch is more common than tiny for talking about the 3rd element
of a version.

Signed-off-by: Dylan Baker 
Reviewed-by: Emil Velikov 

---

 configure.ac  | 8 
 src/gallium/state_trackers/xa/xa_tracker.h.in | 2 +-
 src/gallium/targets/d3dadapter9/Makefile.am   | 2 +-
 src/gallium/targets/xa/Makefile.am| 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/configure.ac b/configure.ac
index 300ee1a89e..1344c12884 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2846,8 +2846,8 @@ AM_CONDITIONAL(HAVE_ARM_ASM, test "x$asm_arch" = xarm)
 
 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([NINE_PATCH], 0)
+AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_PATCH")
 
 AC_SUBST([VDPAU_MAJOR], 1)
 AC_SUBST([VDPAU_MINOR], 0)
@@ -2866,8 +2866,8 @@ AC_SUBST([XVMC_MINOR], 0)
 
 AC_SUBST([XA_MAJOR], 2)
 AC_SUBST([XA_MINOR], 3)
-AC_SUBST([XA_TINY], 0)
-AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
+AC_SUBST([XA_PATCH], 0)
+AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_PATCH")
 
 AC_ARG_ENABLE(valgrind,
   [AS_HELP_STRING([--enable-valgrind],
diff --git a/src/gallium/state_trackers/xa/xa_tracker.h.in 
b/src/gallium/state_trackers/xa/xa_tracker.h.in
index 26c4f21d0f..fc721eed38 100644
--- a/src/gallium/state_trackers/xa/xa_tracker.h.in
+++ b/src/gallium/state_trackers/xa/xa_tracker.h.in
@@ -38,7 +38,7 @@
 
 #define XA_TRACKER_VERSION_MAJOR @XA_MAJOR@
 #define XA_TRACKER_VERSION_MINOR @XA_MINOR@
-#define XA_TRACKER_VERSION_PATCH @XA_TINY@
+#define XA_TRACKER_VERSION_PATCH @XA_PATCH@
 
 #define XA_FLAG_SHARED (1 << 0)
 #define XA_FLAG_RENDER_TARGET  (1 << 1)
diff --git a/src/gallium/targets/d3dadapter9/Makefile.am 
b/src/gallium/targets/d3dadapter9/Makefile.am
index 9357d30332..159c8ea352 100644
--- a/src/gallium/targets/d3dadapter9/Makefile.am
+++ b/src/gallium/targets/d3dadapter9/Makefile.am
@@ -56,7 +56,7 @@ d3dadapter9_la_LDFLAGS = \
-shrext .so \
-module \
-no-undefined \
-   -version-number $(NINE_MAJOR):$(NINE_MINOR):$(NINE_TINY) \
+   -version-number $(NINE_MAJOR):$(NINE_MINOR):$(NINE_PATCH) \
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
 
diff --git a/src/gallium/targets/xa/Makefile.am 
b/src/gallium/targets/xa/Makefile.am
index 83a05230ff..cd9ca49f56 100644
--- a/src/gallium/targets/xa/Makefile.am
+++ b/src/gallium/targets/xa/Makefile.am
@@ -44,7 +44,7 @@ libxatracker_la_LIBADD = \
 
 libxatracker_la_LDFLAGS = \
-no-undefined \
-   -version-number $(XA_MAJOR):$(XA_MINOR):$(XA_TINY) \
+   -version-number $(XA_MAJOR):$(XA_MINOR):$(XA_PATCH) \
$(GC_SECTIONS) \
$(LD_NO_UNDEFINED)
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): genxml: Fix PIPELINE_SELECT on G45/Ironlake.

2017-11-16 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: f274687413cadb5f7cf2242f85e27c11c5753dfa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f274687413cadb5f7cf2242f85e27c11c5753dfa

Author: Kenneth Graunke 
Date:   Wed Nov 15 23:06:27 2017 -0800

genxml: Fix PIPELINE_SELECT on G45/Ironlake.

Original 965 sets bits 28:27 to 0, while G45 and later set it to 1.

Note that the G45 docs are incorrect in this regard - see the DevCTG+
note in the Ironlake PRMs.

Reviewed-by: Lionel Landwerlin 

---

 src/intel/genxml/gen45.xml | 2 +-
 src/intel/genxml/gen5.xml  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/intel/genxml/gen45.xml b/src/intel/genxml/gen45.xml
index c91085831e..136cc6f68a 100644
--- a/src/intel/genxml/gen45.xml
+++ b/src/intel/genxml/gen45.xml
@@ -1162,7 +1162,7 @@
 
   
 
-
+
 
 
 
diff --git a/src/intel/genxml/gen5.xml b/src/intel/genxml/gen5.xml
index 93e687a32b..82cda90957 100644
--- a/src/intel/genxml/gen5.xml
+++ b/src/intel/genxml/gen5.xml
@@ -1253,7 +1253,7 @@
 
   
 
-
+
 
 
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl: pass the dri2_dpy to the $plat_teardown functions

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 9b0223046668593deb9c0be0b557994bb5218788
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9b0223046668593deb9c0be0b557994bb5218788

Author: Emil Velikov 
Date:   Thu Nov 16 18:33:22 2017 +

egl: pass the dri2_dpy to the $plat_teardown functions

Cc: Mark Janes 
Fixes: 40a01c9a0ef ("egl/drm: move teardown code to the platform file")
Fixes: 8d745abc009 ("egl/wayland: move teardown code to the platform file")
Signed-off-by: Emil Velikov 
Tested-by: Dylan Baker 
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103784

---

 src/egl/drivers/dri2/egl_dri2.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index c362206a43..7cc9f20ba2 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -992,10 +992,10 @@ dri2_display_destroy(_EGLDisplay *disp)
   dri2_teardown_x11(dri2_dpy);
   break;
case _EGL_PLATFORM_DRM:
-  dri2_teardown_drm(disp);
+  dri2_teardown_drm(dri2_dpy);
   break;
case _EGL_PLATFORM_WAYLAND:
-  dri2_teardown_wayland(disp);
+  dri2_teardown_wayland(dri2_dpy);
   break;
default:
   /* TODO: add teardown for other platforms */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): meson: Add dridriverdir variable to dri.pc.

2017-11-16 Thread Rafael Antognolli
Module: Mesa
Branch: master
Commit: 306914db92e12d5424493d0ea2c4566b393c58c8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=306914db92e12d5424493d0ea2c4566b393c58c8

Author: Rafael Antognolli 
Date:   Wed Nov 15 09:32:47 2017 -0800

meson: Add dridriverdir variable to dri.pc.

Xorg (and possibly other things) depend on this variable to find the
path to DRI drivers.

Signed-off-by: Rafael Antognolli 
Cc: Dylan Baker 
Reviewed-by: Dylan Baker 

---

 src/mesa/drivers/dri/meson.build | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mesa/drivers/dri/meson.build b/src/mesa/drivers/dri/meson.build
index a2fc8db8ad..217f1e5c71 100644
--- a/src/mesa/drivers/dri/meson.build
+++ b/src/mesa/drivers/dri/meson.build
@@ -58,6 +58,7 @@ if dri_drivers != []
 filebase : 'dri',
 description : 'Direct Rendering Infrastructure',
 version : meson.project_version(),
+variables : ['dridriverdir=${prefix}/' + dri_drivers_path],
 requires_private : ['libdrm >= 2.4.75'],  # FIXME: don't hardcode this
   )
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: add documentation for building with meson

2017-11-16 Thread Dylan Baker
Module: Mesa
Branch: master
Commit: bc17ac58661c2dbbd5fea48d4af628baef434e86
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc17ac58661c2dbbd5fea48d4af628baef434e86

Author: Dylan Baker 
Date:   Tue Oct 17 12:19:49 2017 -0700

docs: add documentation for building with meson

v2: - Add information about CC, CXX, CFLAGS, and CXXFLAGS (Nicolai)
- Add message at top that meson for mesa is still a work in progress
- Add trailing "/" to directories (Eric E.)
- Fix a number of spelling/grammar/style suggestions from Eric E.
- Make a number of changes as suggested by Emil.
v3: - Fix order of commands in example (Eric E.)
- Add documentation for overriding LLVM version (Eric E.)
v4: - Rebase on master
- update default buildtype
- add note about b_ndebug
- Clarify meson configure a bit
v5: - use  for command line arguments (Eric E.)
- Add note about listing options without a build directory
- Minor formatting changes (Eric E.)
- Replace the CC, CFLAGS, etc section with an environment variables
  section, which mentions CC, CXX, CFLAGS, CXXFLAGS, LDFLAGS, and
  DESTDIR
- Add comment that not using buildtype debug might make debugging
  harder
- Add comment that b_ndebug and buildtype are orthogonal

Signed-off-by: Dylan Baker 
Reviewed-by: Eric Engestrom  (v3)

---

 docs/contents.html |   1 +
 docs/meson.html| 168 +
 2 files changed, 169 insertions(+)

diff --git a/docs/contents.html b/docs/contents.html
index d545542109..9a86019e2f 100644
--- a/docs/contents.html
+++ b/docs/contents.html
@@ -43,6 +43,7 @@
 Compiling / Installing
   
 Autoconf
+Meson
   
 
 Precompiled Libraries
diff --git a/docs/meson.html b/docs/meson.html
new file mode 100644
index 00..77f89b0c6c
--- /dev/null
+++ b/docs/meson.html
@@ -0,0 +1,168 @@
+http://www.w3.org/TR/html4/loose.dtd;>
+
+
+  
+  Compilation and Installation using Meson
+  
+
+
+
+
+  The Mesa 3D Graphics Library
+
+
+
+
+
+Compilation and Installation using Meson
+
+1. Basic Usage
+
+The Meson build system for Mesa is still under active development,
+and should not be used in production environments.
+
+The meson build is currently only tested on linux, and is known to not work
+on macOS, Windows, and haiku. This will be fixed.
+
+
+The meson program is used to configure the source directory and generates
+either a ninja build file or Visual Studio® build files. The latter must
+be enabled via the --backend switch, as ninja is the default backend on all
+operating systems. Meson only supports out-of-tree builds, and must be passed a
+directory to put built and generated sources into. We'll call that directory
+"build" for examples.
+
+
+
+meson build/
+
+
+
+To see a description of your options you can run meson configure
+along with a build directory to view the selected options for. This will show
+your meson global arguments and project arguments, along with their defaults
+and your local settings.
+
+Moes does not currently support listing options before configure a build
+directory, but this feature is being discussed upstream.
+
+
+
+meson configure build/
+
+
+
+With additional arguments meson configure is used to change
+options on already configured build directory. All options passed to this
+command are in the form -D "command"="value".
+
+
+
+meson configure build/ -Dprefix=/tmp/install -Dglx=true
+
+
+
+Once you've run the initial meson command successfully you can use
+your configured backend to build the project. With ninja, the -C option can be
+be used to point at a directory to build.
+
+
+
+ninja -C build/
+
+
+
+Without arguments, it will produce libGL.so and/or several other libraries
+depending on the options you have chosen. Later, if you want to rebuild for a
+different configuration, you should run ninja clean before
+changing the configuration, or create a new out of tree build directory for
+each configuration you want to build.
+
+http://mesonbuild.com/Using-multiple-build-directories.html
+
+
+Environment Variables
+Meson supports the standard CC and CXX envrionment variables for
+changing the default compiler, and CFLAGS, CXXFLAGS, and LDFLAGS for setting
+options to the compiler and linker.
+
+The default compilers depends on your operating system. Meson supports most of
+the popular compilers, a complete list is available
+http://mesonbuild.com/Reference-tables.html#compiler-ids;>here.
+
+These arguments are consumed and stored by meson when it is initialized or
+re-initialized. Therefore passing them to meson configure will not do anything,
+and passing them to ninja will only do something if ninja decides to
+re-initialze meson, for example, if a meson.build file has been changed.
+Changing these variables will not cause all targets to be rebuilt, so running
+ninja clean is recomended when changing CFLAGS or 

Mesa (master): docs: Point to apt.llvm.org for development snapshot packages

2017-11-16 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: d25123e23a77e216b45f8e1a83ac32805b07be82
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d25123e23a77e216b45f8e1a83ac32805b07be82

Author: Kai Wasserbäch 
Date:   Thu Nov 16 12:58:50 2017 +0100

docs: Point to apt.llvm.org for development snapshot packages

Signed-off-by: Kai Wasserbäch 
Reviewed-by: Eric Engestrom 

---

 docs/llvmpipe.html | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/docs/llvmpipe.html b/docs/llvmpipe.html
index e4676920ed..12dccb5eae 100644
--- a/docs/llvmpipe.html
+++ b/docs/llvmpipe.html
@@ -51,6 +51,12 @@ It's the fastest software rasterizer for Mesa.
  aptitude install llvm-dev
 

+   If you want development snaptshot builds of LLVM for Debian and derived
+   distributions like Ubuntu, you can use the APT repository at https://apt.llvm.org/; title="Debian Development packages for LLVM"
+   >apt.llvm.org, which are maintained by Debian's LLVM maintainer.
+   
+   
For a RPM-based distribution do:

 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl: fix var type

2017-11-16 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: ca95d7ad4e1b900eb3d559ed5bda0b96b232961d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ca95d7ad4e1b900eb3d559ed5bda0b96b232961d

Author: Eric Engestrom 
Date:   Thu Nov 16 10:02:15 2017 +

egl: fix var type

queryImage() takes an `int*`; compiler is warning about the
signed<->unsigned pointer mismatch.

Fixes: 0db36caa192b129cb4f2 "egl/wayland: Add a fallback when fourcc
   query isn't supported"
Signed-off-by: Eric Engestrom 
Reviewed-by: Frank Binns 
Reviewed-by: Tapani Pälli 
Reviewed-by: Emil Velikov 
Reviewed-by: Derek Foreman 

---

 src/egl/drivers/dri2/platform_wayland.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/egl/drivers/dri2/platform_wayland.c 
b/src/egl/drivers/dri2/platform_wayland.c
index 2aecce35f9..02b32f9888 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -676,7 +676,7 @@ get_fourcc(struct dri2_egl_display *dri2_dpy,
__DRIimage *image, int *fourcc)
 {
EGLBoolean query;
-   uint32_t dri_format;
+   int dri_format;
 
query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC,
fourcc);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i915: add missing extensions.h include

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 9e74e2d13cf1499bf1213a728eb38002dfec6782
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e74e2d13cf1499bf1213a728eb38002dfec6782

Author: Emil Velikov 
Date:   Thu Nov 16 15:51:49 2017 +

i915: add missing extensions.h include

Otherwise we'll bail with due to -Werror=implicit-function-declaration.
It went unnoticed since the we had a bug which did consistently set the
compiler flag.

Fixes: ba8a347f932 ("mesa: split extensions overrides and 
glGetString(GL_EXTENSIONS)")
Signed-off-by: Emil Velikov 
Reviewed-by: Andres Gomez 
Reviewed-by: Marek Olšák 

---

 src/mesa/drivers/dri/i915/i830_context.c | 1 +
 src/mesa/drivers/dri/i915/i915_context.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/mesa/drivers/dri/i915/i830_context.c 
b/src/mesa/drivers/dri/i915/i830_context.c
index 4aa96cad0f..ca00483067 100644
--- a/src/mesa/drivers/dri/i915/i830_context.c
+++ b/src/mesa/drivers/dri/i915/i830_context.c
@@ -27,6 +27,7 @@
 
 #include "i830_context.h"
 #include "main/api_exec.h"
+#include "main/extensions.h"
 #include "main/imports.h"
 #include "main/version.h"
 #include "main/vtxfmt.h"
diff --git a/src/mesa/drivers/dri/i915/i915_context.c 
b/src/mesa/drivers/dri/i915/i915_context.c
index e40e358281..05334b8dbc 100644
--- a/src/mesa/drivers/dri/i915/i915_context.c
+++ b/src/mesa/drivers/dri/i915/i915_context.c
@@ -28,6 +28,7 @@
 #include "i915_context.h"
 #include "main/api_exec.h"
 #include "main/framebuffer.h"
+#include "main/extensions.h"
 #include "main/imports.h"
 #include "main/macros.h"
 #include "main/version.h"

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: call atexit() only as needed

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 9aa9b98e63a88c823ef7248f936fc39fd7e1d00a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9aa9b98e63a88c823ef7248f936fc39fd7e1d00a

Author: Emil Velikov 
Date:   Mon Nov  6 16:02:32 2017 +

mesa: call atexit() only as needed

If the extra_extensions string is empty there's no need to call
atexit() - there's nothing to free.

v2: Rebase

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul  (v1)

---

 src/mesa/main/extensions.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 7483b8f249..be3970c639 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -245,8 +245,6 @@ _mesa_one_time_init_extension_overrides(void)
int len;
size_t offset;
 
-   atexit(free_unknown_extensions_strings);
-
memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions));
memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions));
 
@@ -305,9 +303,9 @@ _mesa_one_time_init_extension_overrides(void)
len = strlen(extra_extensions);
if (len == 0) {
   free(extra_extensions);
-  extra_extensions = NULL;
} else if (extra_extensions[len - 1] == ' ') {
   extra_extensions[len - 1] = '\0';
+  atexit(free_unknown_extensions_strings);
}
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: remove unnecessary 'sort by year' for the GL extensions

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 3d81e11b49366b5636b8524ba0f8c7076e3fdf34
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3d81e11b49366b5636b8524ba0f8c7076e3fdf34

Author: Emil Velikov 
Date:   Wed Oct 25 11:33:09 2017 +0100

mesa: remove unnecessary 'sort by year' for the GL extensions

The sorting was originally added to work around broken games (comment
says Quake3 demo) that were copying the extensions list into small
buffer.

Sorting does not solve the problem, since we'll still overflow and cause
corruption/crash.

Better workaround is to actually trim the string ... as done with a
later commit which introduces the MESA_EXTENSION_MAX_YEAR env. variable.

Side note: On my machine, the existing sorting makes no changes to the
extensions string.

Cc: Jose Fonseca 
Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/extensions.c | 53 +++---
 1 file changed, 3 insertions(+), 50 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 2468e19bf9..7483b8f249 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -352,30 +352,6 @@ _mesa_extension_supported(const struct gl_context *ctx, 
extension_index i)
return (ctx->Version >= ext->version[ctx->API]) && base[ext->offset];
 }
 
-/**
- * Compare two entries of the extensions table.  Sorts first by year,
- * then by name.
- *
- * Arguments are indices into _mesa_extension_table.
- */
-static int
-extension_compare(const void *p1, const void *p2)
-{
-   extension_index i1 = * (const extension_index *) p1;
-   extension_index i2 = * (const extension_index *) p2;
-   const struct mesa_extension *e1 = &_mesa_extension_table[i1];
-   const struct mesa_extension *e2 = &_mesa_extension_table[i2];
-   int res;
-
-   res = (int)e1->year - (int)e2->year;
-
-   if (res == 0) {
-  res = strcmp(e1->name, e2->name);
-   }
-
-   return res;
-}
-
 
 /**
  * Construct the GL_EXTENSIONS string.  Called the first time that
@@ -391,7 +367,7 @@ _mesa_make_extension_string(struct gl_context *ctx)
/* Number of extensions */
unsigned count;
/* Indices of the extensions sorted by year */
-   extension_index *extension_indices;
+   extension_index extension_indices[MESA_EXTENSION_COUNT];
/* String of extra extensions. */
const char *extra_extensions = get_extension_override(ctx);
unsigned k;
@@ -415,8 +391,8 @@ _mesa_make_extension_string(struct gl_context *ctx)
 
   if (i->year <= maxYear &&
   _mesa_extension_supported(ctx, k)) {
-length += strlen(i->name) + 1; /* +1 for space */
-++count;
+ length += strlen(i->name) + 1; /* +1 for space */
+ extension_indices[count++] = k;
   }
}
if (extra_extensions != NULL)
@@ -427,28 +403,6 @@ _mesa_make_extension_string(struct gl_context *ctx)
   return NULL;
}
 
-   extension_indices = malloc(count * sizeof(extension_index));
-   if (extension_indices == NULL) {
-  free(exts);
-  return NULL;
-   }
-
-   /* Sort extensions in chronological order because certain old applications
-* (e.g., Quake3 demo) store the extension list in a static size buffer so
-* chronologically order ensure that the extensions that such applications
-* expect will fit into that buffer.
-*/
-   j = 0;
-   for (k = 0; k < MESA_EXTENSION_COUNT; ++k) {
-  if (_mesa_extension_table[k].year <= maxYear &&
- _mesa_extension_supported(ctx, k)) {
- extension_indices[j++] = k;
-  }
-   }
-   assert(j == count);
-   qsort(extension_indices, count,
- sizeof *extension_indices, extension_compare);
-
/* Build the extension string.*/
for (j = 0; j < count; ++j) {
   const struct mesa_extension *i = 
&_mesa_extension_table[extension_indices[j]];
@@ -456,7 +410,6 @@ _mesa_make_extension_string(struct gl_context *ctx)
   strcat(exts, i->name);
   strcat(exts, " ");
}
-   free(extension_indices);
if (extra_extensions != 0) {
   strcat(exts, extra_extensions);
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: rework the way we manage extra_extensions

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 310e4485cba33716899d56ac910054d906701a9c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=310e4485cba33716899d56ac910054d906701a9c

Author: Emil Velikov 
Date:   Mon Nov  6 16:14:51 2017 +

mesa: rework the way we manage extra_extensions

Store pointers to the tokenized strings in the gl_extensions struct.

This way we can reuse them in glGetStringi() while we construct the
really long string only in _mesa_make_extension_string.

Only 16 pointers/strings are stored for now.

v2: Warn only once when we provide more than 16 unk. extensions, rebase

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul  (v1)

---

 src/mesa/main/extensions.c | 76 --
 src/mesa/main/mtypes.h |  6 
 2 files changed, 39 insertions(+), 43 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index fbfa044765..376ea8d4f2 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -39,7 +39,7 @@
 
 struct gl_extensions _mesa_extension_override_enables;
 struct gl_extensions _mesa_extension_override_disables;
-static char *extra_extensions = NULL;
+static char *unrecognized_extensions = NULL;
 
 
 /**
@@ -196,31 +196,17 @@ set_extension(struct gl_extensions *ext, int i, GLboolean 
state)
return offset;
 }
 
-/**
- * The unrecognized extensions from \c MESA_EXTENSION_OVERRIDE.
- * Returns \c NULL if empty.
- */
-static const char *
-get_extension_override( struct gl_context *ctx )
-{
-   if (extra_extensions)
-  _mesa_problem(ctx, "Trying to enable unknown extensions: %s",
-extra_extensions);
-
-   return extra_extensions;
-}
-
 
 /**
- * \brief Free extra_extensions string
+ * \brief Free string pointed by unrecognized_extensions
  *
- * These strings are allocated early during the first context creation by
+ * This string is allocated early during the first context creation by
  * _mesa_one_time_init_extension_overrides.
  */
 static void
 free_unknown_extensions_strings(void)
 {
-   free(extra_extensions);
+   free(unrecognized_extensions);
 }
 
 
@@ -242,8 +228,8 @@ _mesa_one_time_init_extension_overrides(struct gl_context 
*ctx)
const char *env_const = getenv("MESA_EXTENSION_OVERRIDE");
char *env;
char *ext;
-   int len;
size_t offset;
+   unsigned unknown_ext = 0;
 
memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions));
memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions));
@@ -252,18 +238,11 @@ _mesa_one_time_init_extension_overrides(struct gl_context 
*ctx)
   return;
}
 
-   /* extra_exts: List of unrecognized extensions. */
-   extra_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char));
-
/* Copy env_const because strtok() is destructive. */
env = strdup(env_const);
 
-   if (env == NULL ||
-   extra_extensions == NULL) {
-  free(env);
-  free(extra_extensions);
+   if (env == NULL)
   return;
-   }
 
for (ext = strtok(env, " "); ext != NULL; ext = strtok(NULL, " ")) {
   int enable;
@@ -292,19 +271,28 @@ _mesa_one_time_init_extension_overrides(struct gl_context 
*ctx)
  recognized = false;
 
   if (!recognized && enable) {
- strcat(extra_extensions, ext);
- strcat(extra_extensions, " ");
+ if (unknown_ext >= MAX_UNRECOGNIZED_EXTENSIONS) {
+static bool warned;
+
+if (!warned) {
+   warned = true;
+   _mesa_problem(ctx, "Trying to enable too many unknown 
extension. "
+  "Only the first %d will be honoured",
+  MAX_UNRECOGNIZED_EXTENSIONS);
+}
+ } else {
+ctx->Extensions.unrecognized_extensions[unknown_ext] = ext;
+unknown_ext++;
+
+_mesa_problem(ctx, "Trying to enable unknown extension: %s", ext);
+ }
   }
}
 
-   free(env);
-
-   /* Remove trailing space, and free if unused. */
-   len = strlen(extra_extensions);
-   if (len == 0) {
-  free(extra_extensions);
-   } else if (extra_extensions[len - 1] == ' ') {
-  extra_extensions[len - 1] = '\0';
+   if (!unknown_ext) {
+  free(env);
+   } else {
+  unrecognized_extensions = env;
   atexit(free_unknown_extensions_strings);
}
 }
@@ -366,8 +354,6 @@ _mesa_make_extension_string(struct gl_context *ctx)
unsigned count;
/* Indices of the extensions sorted by year */
extension_index extension_indices[MESA_EXTENSION_COUNT];
-   /* String of extra extensions. */
-   const char *extra_extensions = get_extension_override(ctx);
unsigned k;
unsigned j;
unsigned maxYear = ~0;
@@ -393,8 +379,9 @@ _mesa_make_extension_string(struct gl_context *ctx)
  extension_indices[count++] = k;
   }
}
-   if (extra_extensions != NULL)
-  length += 1 + 

Mesa (master): mesa: return 'unrecognized' extensions in glGetStringi

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: f3ea07959b01815ba2c89f72fabf90e91cd09e45
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3ea07959b01815ba2c89f72fabf90e91cd09e45

Author: Emil Velikov 
Date:   Mon Nov  6 18:01:36 2017 +

mesa: return 'unrecognized' extensions in glGetStringi

Analogous to the glGetString() case - report all the
extensions enabled via MESA_EXTENSION_OVERRIDE

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/extensions.c | 13 +
 1 file changed, 13 insertions(+)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 376ea8d4f2..38fc52d020 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -421,6 +421,11 @@ _mesa_get_extension_count(struct gl_context *ctx)
   if (_mesa_extension_supported(ctx, k))
 ctx->Extensions.Count++;
}
+
+   for (k = 0; k < MAX_UNRECOGNIZED_EXTENSIONS; ++k) {
+  if (ctx->Extensions.unrecognized_extensions[k])
+ctx->Extensions.Count++;
+   }
return ctx->Extensions.Count;
 }
 
@@ -442,5 +447,13 @@ _mesa_get_enabled_extension(struct gl_context *ctx, GLuint 
index)
   }
}
 
+   for (i = 0; i < MAX_UNRECOGNIZED_EXTENSIONS; ++i) {
+  if (ctx->Extensions.unrecognized_extensions[i]) {
+ if (n == index)
+return (const GLubyte*) ctx->Extensions.unrecognized_extensions[i];
+ else
+++n;
+  }
+   }
return NULL;
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: split extensions overrides and glGetString( GL_EXTENSIONS)

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: ba8a347f932f966422a5e156e54e8d05b664cf44
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ba8a347f932f966422a5e156e54e8d05b664cf44

Author: Emil Velikov 
Date:   Mon Nov  6 15:20:35 2017 +

mesa: split extensions overrides and glGetString(GL_EXTENSIONS)

Currently we apply the extension overrides and construct the extensions
string upon MakeCurrent.

They are two distinct things, so let's slit the two while pushing the
overrides management _before_ _mesa_compute_version(). This ensures that
the version is updated to reflect the enabled/disabled extensions.

Cc: Jordan Justen 
Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/drivers/dri/i915/i830_context.c |  1 +
 src/mesa/drivers/dri/i915/i915_context.c |  1 +
 src/mesa/drivers/dri/i965/brw_context.c  |  1 +
 src/mesa/drivers/dri/r200/r200_context.c |  1 +
 src/mesa/drivers/dri/radeon/radeon_context.c |  1 +
 src/mesa/drivers/dri/swrast/swrast.c |  1 +
 src/mesa/drivers/osmesa/osmesa.c |  1 +
 src/mesa/drivers/x11/xm_api.c|  1 +
 src/mesa/main/extensions.c   | 32 +++-
 src/mesa/main/extensions.h   |  2 ++
 src/mesa/main/tests/dispatch_sanity.cpp  |  1 +
 src/mesa/state_tracker/st_context.c  |  1 +
 12 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/i830_context.c 
b/src/mesa/drivers/dri/i915/i830_context.c
index 299e54d50e..4aa96cad0f 100644
--- a/src/mesa/drivers/dri/i915/i830_context.c
+++ b/src/mesa/drivers/dri/i915/i830_context.c
@@ -124,6 +124,7 @@ i830CreateContext(int api,
_tnl_allow_vertex_fog(ctx, 1);
_tnl_allow_pixel_fog(ctx, 0);
 
+   _mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
 
_mesa_initialize_dispatch_tables(ctx);
diff --git a/src/mesa/drivers/dri/i915/i915_context.c 
b/src/mesa/drivers/dri/i915/i915_context.c
index 4f6bdb74e7..e40e358281 100644
--- a/src/mesa/drivers/dri/i915/i915_context.c
+++ b/src/mesa/drivers/dri/i915/i915_context.c
@@ -289,6 +289,7 @@ i915CreateContext(int api,
_tnl_allow_vertex_fog(ctx, 0);
_tnl_allow_pixel_fog(ctx, 1);
 
+   _mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
 
_mesa_initialize_dispatch_tables(ctx);
diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
b/src/mesa/drivers/dri/i965/brw_context.c
index f49ac4480a..dd55b43669 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -1051,6 +1051,7 @@ brwCreateContext(gl_api api,
if (INTEL_DEBUG & DEBUG_SHADER_TIME)
   brw_init_shader_time(brw);
 
+   _mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
 
_mesa_initialize_dispatch_tables(ctx);
diff --git a/src/mesa/drivers/dri/r200/r200_context.c 
b/src/mesa/drivers/dri/r200/r200_context.c
index edd433ae97..eb7d92f3c6 100644
--- a/src/mesa/drivers/dri/r200/r200_context.c
+++ b/src/mesa/drivers/dri/r200/r200_context.c
@@ -394,6 +394,7 @@ GLboolean r200CreateContext( gl_api api,
   TCL_FALLBACK(>radeon.glCtx, R200_TCL_FALLBACK_TCL_DISABLE, 1);
}
 
+   _mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
 
/* Exec table initialization requires the version to be computed */
diff --git a/src/mesa/drivers/dri/radeon/radeon_context.c 
b/src/mesa/drivers/dri/radeon/radeon_context.c
index 04c76cdba1..8ad0911586 100644
--- a/src/mesa/drivers/dri/radeon/radeon_context.c
+++ b/src/mesa/drivers/dri/radeon/radeon_context.c
@@ -353,6 +353,7 @@ r100CreateContext( gl_api api,
 /*   _tnl_need_dlist_norm_lengths( ctx, GL_FALSE ); */
}
 
+   _mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
 
/* Exec table initialization requires the version to be computed */
diff --git a/src/mesa/drivers/dri/swrast/swrast.c 
b/src/mesa/drivers/dri/swrast/swrast.c
index f9bd1b9d56..4bee01ad30 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -817,6 +817,7 @@ dri_create_context(gl_api api,
 _mesa_meta_init(mesaCtx);
 _mesa_enable_sw_extensions(mesaCtx);
 
+   _mesa_override_extensions(mesaCtx);
 _mesa_compute_version(mesaCtx);
 
 _mesa_initialize_dispatch_tables(mesaCtx);
diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index 72bff3da2c..1df3da4cd2 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -913,6 +913,7 @@ OSMesaCreateContextAttribs(const int *attribList, 
OSMesaContext sharelist)
  swrast->choose_line = osmesa_choose_line;
  swrast->choose_triangle = osmesa_choose_triangle;
 
+ _mesa_override_extensions(ctx);
  _mesa_compute_version(ctx);
 
  if (ctx->Version < version_major * 10 + version_minor) {
diff --git a/src/mesa/drivers/x11/xm_api.c 

Mesa (master): i965: remove ARB_compute_shader extension override

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: afd6a964a423c015548f0474ee4e5e1a24967fe6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=afd6a964a423c015548f0474ee4e5e1a24967fe6

Author: Emil Velikov 
Date:   Tue Oct 24 15:21:40 2017 +0100

i965: remove ARB_compute_shader extension override

Checking the override was useful in the early stages of developing the
extension.

Now that everything is wired, where possible, we can drop the check.
Doing so allows us to simplify some of the related code.

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 
Reviewed-by: Jordan Justen 

---

 src/mesa/drivers/dri/i965/brw_context.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
b/src/mesa/drivers/dri/i965/brw_context.c
index bc032dc5f6..f49ac4480a 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -348,8 +348,7 @@ brw_initialize_context_constants(struct brw_context *brw)
  (_mesa_is_desktop_gl(ctx) &&
   ctx->Const.MaxComputeWorkGroupSize[0] >= 1024) ||
  (ctx->API == API_OPENGLES2 &&
-  ctx->Const.MaxComputeWorkGroupSize[0] >= 128) ||
- _mesa_extension_override_enables.ARB_compute_shader,
+  ctx->Const.MaxComputeWorkGroupSize[0] >= 128),
};
 
unsigned num_stages = 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: remove duplicate 'disabled extensions' list

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: e4cdce50585edbbbe9b6fe0d3f7215a67b989309
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e4cdce50585edbbbe9b6fe0d3f7215a67b989309

Author: Emil Velikov 
Date:   Tue Oct 24 15:47:41 2017 +0100

mesa: remove duplicate 'disabled extensions' list

While parsing MESA_EXTENSION_OVERRIDE we keep track of the disabled
extensions, twice - in _mesa_extension_override_disables and
disabled_extensions.

Upon context creation, we use the former to modify the extensions list.
Yet, we still check the updated list against disabled_extensions.

Remove disabled_extensions, it's obsolete.

Cc: Jordan Justen 
Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/extensions.c | 8 +---
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 13a72b111d..87f60d58c6 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -48,8 +48,6 @@ static char *extra_extensions = NULL;
  */
 #define o(x) offsetof(struct gl_extensions, x)
 
-static bool disabled_extensions[MESA_EXTENSION_COUNT];
-
 /**
  * Given an extension name, lookup up the corresponding member of struct
  * gl_extensions and return that member's index.  If the name is
@@ -298,9 +296,6 @@ _mesa_one_time_init_extension_overrides(void)
  recognized = false;
   }
 
-  if (i >= 0)
- disabled_extensions[i] = !enable;
-
   if (!recognized && enable) {
  strcat(extra_extensions, ext);
  strcat(extra_extensions, " ");
@@ -357,8 +352,7 @@ _mesa_extension_supported(const struct gl_context *ctx, 
extension_index i)
const bool *base = (bool *) >Extensions;
const struct mesa_extension *ext = _mesa_extension_table + i;
 
-   return !disabled_extensions[i] &&
-  (ctx->Version >= ext->version[ctx->API]) && base[ext->offset];
+   return (ctx->Version >= ext->version[ctx->API]) && base[ext->offset];
 }
 
 /**

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: reuse set_extension() for _mesa_extension_override_disables

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: a3f82876f4471b88158074766c6115e15642d734
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3f82876f4471b88158074766c6115e15642d734

Author: Emil Velikov 
Date:   Tue Oct 24 15:57:08 2017 +0100

mesa: reuse set_extension() for _mesa_extension_override_disables

We already use it for _mesa_extension_override_enables.
Improve consistency and use it for both extension lists.

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/extensions.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 351ed1c4dd..2468e19bf9 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -287,12 +287,11 @@ _mesa_one_time_init_extension_overrides(void)
 
   i = name_to_index(ext);
   offset = set_extension(&_mesa_extension_override_enables, i, enable);
-  if (offset != 0 && (offset != o(dummy_true) || enable != GL_FALSE)) {
- ((GLboolean *) &_mesa_extension_override_disables)[offset] = !enable;
+  offset = set_extension(&_mesa_extension_override_disables, i, !enable);
+  if (offset != 0)
  recognized = true;
-  } else {
+  else
  recognized = false;
-  }
 
   if (!recognized && enable) {
  strcat(extra_extensions, ext);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: drop unnecessary coping of extra_extensions

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 444d9e4b081ab18352fc30a3c90829536ddd49fb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=444d9e4b081ab18352fc30a3c90829536ddd49fb

Author: Emil Velikov 
Date:   Tue Oct 24 14:35:41 2017 +0100

mesa: drop unnecessary coping of extra_extensions

The function get_extension_override() returns a copy of a string,
only for it to be copied again ...

Drop the unneeded calloc/strdup/free dance.

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/extensions.c | 17 ++---
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index 87f60d58c6..351ed1c4dd 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -198,18 +198,16 @@ set_extension(struct gl_extensions *ext, int i, GLboolean 
state)
 
 /**
  * The unrecognized extensions from \c MESA_EXTENSION_OVERRIDE.
- * Must be freed, does not return \c NULL.
+ * Returns \c NULL if empty.
  */
-static char *
+static const char *
 get_extension_override( struct gl_context *ctx )
 {
-   if (extra_extensions == NULL) {
-  return calloc(1, sizeof(char));
-   } else {
+   if (extra_extensions)
   _mesa_problem(ctx, "Trying to enable unknown extensions: %s",
 extra_extensions);
-  return strdup(extra_extensions);
-   }
+
+   return extra_extensions;
 }
 
 
@@ -396,7 +394,7 @@ _mesa_make_extension_string(struct gl_context *ctx)
/* Indices of the extensions sorted by year */
extension_index *extension_indices;
/* String of extra extensions. */
-   char *extra_extensions = get_extension_override(ctx);
+   const char *extra_extensions = get_extension_override(ctx);
unsigned k;
unsigned j;
unsigned maxYear = ~0;
@@ -427,14 +425,12 @@ _mesa_make_extension_string(struct gl_context *ctx)
 
exts = calloc(ALIGN(length + 1, 4), sizeof(char));
if (exts == NULL) {
-  free(extra_extensions);
   return NULL;
}
 
extension_indices = malloc(count * sizeof(extension_index));
if (extension_indices == NULL) {
   free(exts);
-  free(extra_extensions);
   return NULL;
}
 
@@ -464,7 +460,6 @@ _mesa_make_extension_string(struct gl_context *ctx)
free(extension_indices);
if (extra_extensions != 0) {
   strcat(exts, extra_extensions);
-  free(extra_extensions);
}
 
return (GLubyte *) exts;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: pass the ctx to _mesa_one_time_init_extension_overrides

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 693682bd015e871f7beca15aeb441c2e1ba76cec
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=693682bd015e871f7beca15aeb441c2e1ba76cec

Author: Emil Velikov 
Date:   Mon Nov  6 17:58:08 2017 +

mesa: pass the ctx to _mesa_one_time_init_extension_overrides

Will be needed with next commit

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/context.c| 2 +-
 src/mesa/main/extensions.c | 2 +-
 src/mesa/main/extensions.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 762765c9c9..25dd59ae2c 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -390,7 +390,7 @@ one_time_init( struct gl_context *ctx )
 
   _mesa_locale_init();
 
-  _mesa_one_time_init_extension_overrides();
+  _mesa_one_time_init_extension_overrides(ctx);
 
   _mesa_get_cpu_features();
 
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
index be3970c639..fbfa044765 100644
--- a/src/mesa/main/extensions.c
+++ b/src/mesa/main/extensions.c
@@ -237,7 +237,7 @@ free_unknown_extensions_strings(void)
  *- Collect unrecognized extension names in a new string.
  */
 void
-_mesa_one_time_init_extension_overrides(void)
+_mesa_one_time_init_extension_overrides(struct gl_context *ctx)
 {
const char *env_const = getenv("MESA_EXTENSION_OVERRIDE");
char *env;
diff --git a/src/mesa/main/extensions.h b/src/mesa/main/extensions.h
index ebed8fa4fc..59761bfcdb 100644
--- a/src/mesa/main/extensions.h
+++ b/src/mesa/main/extensions.h
@@ -47,7 +47,7 @@ struct gl_extensions;
 
 extern void _mesa_enable_sw_extensions(struct gl_context *ctx);
 
-extern void _mesa_one_time_init_extension_overrides(void);
+extern void _mesa_one_time_init_extension_overrides(struct gl_context *ctx);
 
 extern void _mesa_init_extensions(struct gl_extensions *extentions);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: call _mesa_make_extension_string only as needed

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 167e958a87d53614e6bbb78b09bafcea17335b4b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=167e958a87d53614e6bbb78b09bafcea17335b4b

Author: Emil Velikov 
Date:   Mon Nov  6 15:33:52 2017 +

mesa: call _mesa_make_extension_string only as needed

As of previous commit we removed the extension overrides from this
function.

Thus we no longer need to call it during MakeCurrent, so we can
construct the extensions string when needed - _mesa_GetString.

This commit effectively reverts a879d14ecf8 ("mesa: initialize extension
string when context is first bound")

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/main/context.c   | 2 --
 src/mesa/main/getstring.c | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 61099eb39f..762765c9c9 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1576,8 +1576,6 @@ handle_first_current(struct gl_context *ctx)
   return;
}
 
-   ctx->Extensions.String = _mesa_make_extension_string(ctx);
-
check_context_limits(ctx);
 
/* According to GL_MESA_configless_context the default value of
diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
index 4c805ca4d5..931f6a476c 100644
--- a/src/mesa/main/getstring.c
+++ b/src/mesa/main/getstring.c
@@ -143,6 +143,8 @@ _mesa_GetString( GLenum name )
 _mesa_error(ctx, GL_INVALID_ENUM, "glGetString(GL_EXTENSIONS)");
 return (const GLubyte *) 0;
  }
+ if (!ctx->Extensions.String)
+ctx->Extensions.String = _mesa_make_extension_string(ctx);
  return (const GLubyte *) ctx->Extensions.String;
   case GL_SHADING_LANGUAGE_VERSION:
  if (ctx->API == API_OPENGLES)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: use _mesa_is_desktop_gl helper

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: f8812931cf165760a81afb2cbc0520e3aca89f6b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f8812931cf165760a81afb2cbc0520e3aca89f6b

Author: Emil Velikov 
Date:   Tue Oct 24 11:58:56 2017 +0100

i965: use _mesa_is_desktop_gl helper

Use the helper over opencoding the check.

Signed-off-by: Emil Velikov 
Reviewed-by: Brian Paul 

---

 src/mesa/drivers/dri/i965/brw_context.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c 
b/src/mesa/drivers/dri/i965/brw_context.c
index 19d5a2e350..bc032dc5f6 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -345,7 +345,7 @@ brw_initialize_context_constants(struct brw_context *brw)
   [MESA_SHADER_GEOMETRY] = devinfo->gen >= 6,
   [MESA_SHADER_FRAGMENT] = true,
   [MESA_SHADER_COMPUTE] =
- ((ctx->API == API_OPENGL_COMPAT || ctx->API == API_OPENGL_CORE) &&
+ (_mesa_is_desktop_gl(ctx) &&
   ctx->Const.MaxComputeWorkGroupSize[0] >= 1024) ||
  (ctx->API == API_OPENGLES2 &&
   ctx->Const.MaxComputeWorkGroupSize[0] >= 128) ||

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl/x11: move teardown code to the platform file

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 938fcab08b863603834b37afaae6a253e670df24
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=938fcab08b863603834b37afaae6a253e670df24

Author: Emil Velikov 
Date:   Thu Nov  9 18:58:52 2017 +

egl/x11: move teardown code to the platform file

Signed-off-by: Emil Velikov 
Reviewed-by: Eric Engestrom 

---

 src/egl/drivers/dri2/egl_dri2.c | 6 +-
 src/egl/drivers/dri2/egl_dri2.h | 4 
 src/egl/drivers/dri2/platform_x11.c | 6 ++
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index af82142535..280e70c137 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -988,13 +988,9 @@ dri2_display_destroy(_EGLDisplay *disp)
 #endif
 
switch (disp->Platform) {
-#ifdef HAVE_X11_PLATFORM
case _EGL_PLATFORM_X11:
-  if (dri2_dpy->own_device) {
- xcb_disconnect(dri2_dpy->conn);
-  }
+  dri2_teardown_x11(dri2_dpy);
   break;
-#endif
 #ifdef HAVE_DRM_PLATFORM
case _EGL_PLATFORM_DRM:
   if (dri2_dpy->own_device) {
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index 9cccf05253..ef5a458f5d 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -403,12 +403,16 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext 
*ctx,
 #ifdef HAVE_X11_PLATFORM
 EGLBoolean
 dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp);
+void
+dri2_teardown_x11(struct dri2_egl_display *dri2_dpy);
 #else
 static inline EGLBoolean
 dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp)
 {
return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built");
 }
+static inline void
+dri2_teardown_x11(struct dri2_egl_display *dri2_dpy) {}
 #endif
 
 #ifdef HAVE_DRM_PLATFORM
diff --git a/src/egl/drivers/dri2/platform_x11.c 
b/src/egl/drivers/dri2/platform_x11.c
index 5bcdb2dac7..c49cb1fd8e 100644
--- a/src/egl/drivers/dri2/platform_x11.c
+++ b/src/egl/drivers/dri2/platform_x11.c
@@ -1476,3 +1476,9 @@ dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp)
return initialized;
 }
 
+void
+dri2_teardown_x11(struct dri2_egl_display *dri2_dpy)
+{
+   if (dri2_dpy->own_device)
+  xcb_disconnect(dri2_dpy->conn);
+}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl: add note about missing $plat_teardown

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 6614804d1e9848ffd3402e4b23f4c57d39a59b7c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6614804d1e9848ffd3402e4b23f4c57d39a59b7c

Author: Emil Velikov 
Date:   Mon Nov 13 14:02:56 2017 +

egl: add note about missing $plat_teardown

Some platforms are missing a proper teardown function. Add a small TODO
to make it obvious.

Signed-off-by: Emil Velikov 
Reviewed-by: Eric Engestrom 

---

 src/egl/drivers/dri2/egl_dri2.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 28a3591ed4..c362206a43 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -998,6 +998,7 @@ dri2_display_destroy(_EGLDisplay *disp)
   dri2_teardown_wayland(disp);
   break;
default:
+  /* TODO: add teardown for other platforms */
   break;
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl: Provide meaningfull error when built w/ o requested platform

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 55245fe1c9925045198f2f0954eff8f2e5d42d7b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=55245fe1c9925045198f2f0954eff8f2e5d42d7b

Author: Emil Velikov 
Date:   Thu Nov  9 17:55:19 2017 +

egl: Provide meaningfull error when built w/o requested platform

The current "No EGL platform enabled." is misleading and wrong.
We reach said code when $platform is missing.

To make this more obvious and clear provide wrappers in the header
file, making the code a bit easier to follow.

Signed-off-by: Emil Velikov 
Reviewed-by: Eric Engestrom 

---

 src/egl/drivers/dri2/egl_dri2.c | 12 +---
 src/egl/drivers/dri2/egl_dri2.h | 40 
 2 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 8861742c17..af82142535 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -915,33 +915,23 @@ dri2_initialize(_EGLDriver *drv, _EGLDisplay *disp)
   return EGL_FALSE;
 
switch (disp->Platform) {
-#ifdef HAVE_SURFACELESS_PLATFORM
case _EGL_PLATFORM_SURFACELESS:
   ret = dri2_initialize_surfaceless(drv, disp);
   break;
-#endif
-#ifdef HAVE_X11_PLATFORM
case _EGL_PLATFORM_X11:
   ret = dri2_initialize_x11(drv, disp);
   break;
-#endif
-#ifdef HAVE_DRM_PLATFORM
case _EGL_PLATFORM_DRM:
   ret = dri2_initialize_drm(drv, disp);
   break;
-#endif
-#ifdef HAVE_WAYLAND_PLATFORM
case _EGL_PLATFORM_WAYLAND:
   ret = dri2_initialize_wayland(drv, disp);
   break;
-#endif
-#ifdef HAVE_ANDROID_PLATFORM
case _EGL_PLATFORM_ANDROID:
   ret = dri2_initialize_android(drv, disp);
   break;
-#endif
default:
-  _eglLog(_EGL_WARNING, "No EGL platform enabled.");
+  unreachable("Callers ensure we cannot get here.");
   return EGL_FALSE;
}
 
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index 0ec8f44dce..9cccf05253 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -400,20 +400,60 @@ _EGLImage *
 dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
   EGLClientBuffer buffer, const EGLint *attr_list);
 
+#ifdef HAVE_X11_PLATFORM
 EGLBoolean
 dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp);
+#else
+static inline EGLBoolean
+dri2_initialize_x11(_EGLDriver *drv, _EGLDisplay *disp)
+{
+   return _eglError(EGL_NOT_INITIALIZED, "X11 platform not built");
+}
+#endif
 
+#ifdef HAVE_DRM_PLATFORM
 EGLBoolean
 dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp);
+#else
+static inline EGLBoolean
+dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
+{
+   return _eglError(EGL_NOT_INITIALIZED, "GBM/DRM platform not built");
+}
+#endif
 
+#ifdef HAVE_WAYLAND_PLATFORM
 EGLBoolean
 dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp);
+#else
+static inline EGLBoolean
+dri2_initialize_wayland(_EGLDriver *drv, _EGLDisplay *disp)
+{
+   return _eglError(EGL_NOT_INITIALIZED, "Wayland platform not built");
+}
+#endif
 
+#ifdef HAVE_ANDROID_PLATFORM
 EGLBoolean
 dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp);
+#else
+static inline EGLBoolean
+dri2_initialize_android(_EGLDriver *drv, _EGLDisplay *disp)
+{
+   return _eglError(EGL_NOT_INITIALIZED, "Android platform not built");
+}
+#endif
 
+#ifdef HAVE_SURFACELESS_PLATFORM
 EGLBoolean
 dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp);
+#else
+static inline EGLBoolean
+dri2_initialize_surfaceless(_EGLDriver *drv, _EGLDisplay *disp)
+{
+   return _eglError(EGL_NOT_INITIALIZED, "Surfaceless platform not built");
+}
+#endif
 
 void
 dri2_flush_drawable_for_swapbuffers(_EGLDisplay *disp, _EGLSurface *draw);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl/drm: move teardown code to the platform file

2017-11-16 Thread Emil Velikov
Module: Mesa
Branch: master
Commit: 40a01c9a0ef2c8110d79c284976ef34c0f73be92
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40a01c9a0ef2c8110d79c284976ef34c0f73be92

Author: Emil Velikov 
Date:   Thu Nov  9 19:04:25 2017 +

egl/drm: move teardown code to the platform file

Signed-off-by: Emil Velikov 
Reviewed-by: Eric Engestrom 

---

 src/egl/drivers/dri2/egl_dri2.c | 6 +-
 src/egl/drivers/dri2/egl_dri2.h | 4 
 src/egl/drivers/dri2/platform_drm.c | 7 +++
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 280e70c137..fc56e6357a 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -991,13 +991,9 @@ dri2_display_destroy(_EGLDisplay *disp)
case _EGL_PLATFORM_X11:
   dri2_teardown_x11(dri2_dpy);
   break;
-#ifdef HAVE_DRM_PLATFORM
case _EGL_PLATFORM_DRM:
-  if (dri2_dpy->own_device) {
- gbm_device_destroy(_dpy->gbm_dri->base);
-  }
+  dri2_teardown_drm(disp);
   break;
-#endif
 #ifdef HAVE_WAYLAND_PLATFORM
case _EGL_PLATFORM_WAYLAND:
   if (dri2_dpy->wl_drm)
diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
index ef5a458f5d..9222fa122b 100644
--- a/src/egl/drivers/dri2/egl_dri2.h
+++ b/src/egl/drivers/dri2/egl_dri2.h
@@ -418,12 +418,16 @@ dri2_teardown_x11(struct dri2_egl_display *dri2_dpy) {}
 #ifdef HAVE_DRM_PLATFORM
 EGLBoolean
 dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp);
+void
+dri2_teardown_drm(struct dri2_egl_display *dri2_dpy);
 #else
 static inline EGLBoolean
 dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
 {
return _eglError(EGL_NOT_INITIALIZED, "GBM/DRM platform not built");
 }
+static inline void
+dri2_teardown_drm(struct dri2_egl_display *dri2_dpy) {}
 #endif
 
 #ifdef HAVE_WAYLAND_PLATFORM
diff --git a/src/egl/drivers/dri2/platform_drm.c 
b/src/egl/drivers/dri2/platform_drm.c
index 9005f5dd9e..416fd4cc65 100644
--- a/src/egl/drivers/dri2/platform_drm.c
+++ b/src/egl/drivers/dri2/platform_drm.c
@@ -741,3 +741,10 @@ cleanup:
dri2_display_destroy(disp);
return _eglError(EGL_NOT_INITIALIZED, err);
 }
+
+void
+dri2_teardown_drm(struct dri2_egl_display *dri2_dpy)
+{
+   if (dri2_dpy->own_device)
+  gbm_device_destroy(_dpy->gbm_dri->base);
+}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): meson: Don't define HAVE_PTHREAD only on linux

2017-11-16 Thread Jon TURNEY
Module: Mesa
Branch: master
Commit: 8ceccbf80dea7ac34cda68ec3117d80dd8922159
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ceccbf80dea7ac34cda68ec3117d80dd8922159

Author: Jon Turney 
Date:   Mon Nov 13 10:13:39 2017 +

meson: Don't define HAVE_PTHREAD only on linux

I'm not sure of the reason for this. I don't see anything like this in
configure.ac

In include/c11/threads.h the cases are:

1) building for Windows -> threads_win32.h
2) HAVE_PTHREAD -> threads_posix.h
3) Not supported on this platform

So not defining HAVE_PTHREAD for anything not Windows just means we can't
build at all.

When we are building for Windows, I'm not sure if dependency('threads')
would ever find anything, or defining HAVE_PTHREAD has any effect, but avoid
defining it there, just in case.

Signed-off-by: Jon Turney 
Reviewed-by: Eric Engestrom 
Reviewed-by: Dylan Baker 

---

 meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meson.build b/meson.build
index 7fdc3c280e..383ebb3666 100644
--- a/meson.build
+++ b/meson.build
@@ -668,7 +668,7 @@ endif
 # TODO: some of these may be conditional
 dep_zlib = dependency('zlib', version : '>= 1.2.3')
 dep_thread = dependency('threads')
-if dep_thread.found() and host_machine.system() == 'linux'
+if dep_thread.found() and host_machine.system() != 'windows'
   pre_args += '-DHAVE_PTHREAD'
 endif
 dep_elf = dependency('libelf', required : false)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno: mark SSBOs written at draw time

2017-11-16 Thread Rob Clark
Module: Mesa
Branch: master
Commit: 92e75bf0ec77d632835f6bb4201b7e3f882a11bb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=92e75bf0ec77d632835f6bb4201b7e3f882a11bb

Author: Rob Clark 
Date:   Thu Nov 16 08:32:32 2017 -0500

freedreno: mark SSBOs written at draw time

Comment was right, implementation was wrong ;-)

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/freedreno_draw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c 
b/src/gallium/drivers/freedreno/freedreno_draw.c
index f2ccfc5854..cd3647b9e7 100644
--- a/src/gallium/drivers/freedreno/freedreno_draw.c
+++ b/src/gallium/drivers/freedreno/freedreno_draw.c
@@ -163,7 +163,7 @@ fd_draw_vbo(struct pipe_context *pctx, const struct 
pipe_draw_info *info)
 * read vs written, so just assume the worst
 */
foreach_bit(i, ctx->shaderbuf[PIPE_SHADER_FRAGMENT].enabled_mask)
-   resource_read(batch, 
ctx->shaderbuf[PIPE_SHADER_FRAGMENT].sb[i].buffer);
+   resource_written(batch, 
ctx->shaderbuf[PIPE_SHADER_FRAGMENT].sb[i].buffer);
 
foreach_bit(i, ctx->constbuf[PIPE_SHADER_VERTEX].enabled_mask)
resource_read(batch, 
ctx->constbuf[PIPE_SHADER_VERTEX].cb[i].buffer);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno/a5xx: ARB_framebuffer_no_attachments support

2017-11-16 Thread Rob Clark
Module: Mesa
Branch: master
Commit: 2878af74dd3629aaa292de75f7d12f153ab1ad86
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2878af74dd3629aaa292de75f7d12f153ab1ad86

Author: Rob Clark 
Date:   Wed Nov 15 09:56:38 2017 -0500

freedreno/a5xx: ARB_framebuffer_no_attachments support

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/a5xx/fd5_screen.c  | 5 +
 src/gallium/drivers/freedreno/freedreno_gmem.c   | 5 +
 src/gallium/drivers/freedreno/freedreno_screen.c | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_screen.c 
b/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
index 96f83ed334..2816c36154 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_screen.c
@@ -73,6 +73,11 @@ fd5_screen_is_format_supported(struct pipe_screen *pscreen,
PIPE_BIND_SHARED);
}
 
+   /* For ARB_framebuffer_no_attachments: */
+   if ((usage & PIPE_BIND_RENDER_TARGET) && (format == PIPE_FORMAT_NONE)) {
+   retval |= usage & PIPE_BIND_RENDER_TARGET;
+   }
+
if ((usage & PIPE_BIND_DEPTH_STENCIL) &&
(fd5_pipe2depth(format) != (enum a5xx_depth_format)~0) 
&&
(fd5_pipe2tex(format) != (enum a5xx_tex_fmt)~0)) {
diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.c 
b/src/gallium/drivers/freedreno/freedreno_gmem.c
index 9c534c4f26..fef76733ab 100644
--- a/src/gallium/drivers/freedreno/freedreno_gmem.c
+++ b/src/gallium/drivers/freedreno/freedreno_gmem.c
@@ -397,6 +397,11 @@ fd_gmem_render_tiles(struct fd_batch *batch)
} else if (!(fd_mesa_debug & FD_DBG_NOBYPASS)) {
sysmem = true;
}
+
+   /* For ARB_framebuffer_no_attachments: */
+   if ((pfb->nr_cbufs == 0) && !pfb->zsbuf) {
+   sysmem = true;
+   }
}
 
fd_reset_wfi(batch);
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c 
b/src/gallium/drivers/freedreno/freedreno_screen.c
index 0061b20059..62dfd2651c 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -295,7 +295,6 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
case PIPE_CAP_GENERATE_MIPMAP:
case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
-   case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
case PIPE_CAP_CULL_DISTANCE:
case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES:
@@ -330,6 +329,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
return 0;
 
case PIPE_CAP_DRAW_INDIRECT:
+   case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
if (is_a5xx(screen))
return 1;
return 0;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno: also mark images used by draw/grid

2017-11-16 Thread Rob Clark
Module: Mesa
Branch: master
Commit: ff018a3f555238efc060ff4dc9cf27c1a0830522
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff018a3f555238efc060ff4dc9cf27c1a0830522

Author: Rob Clark 
Date:   Thu Nov 16 08:37:59 2017 -0500

freedreno: also mark images used by draw/grid

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/freedreno_draw.c | 18 ++
 1 file changed, 18 insertions(+)

diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c 
b/src/gallium/drivers/freedreno/freedreno_draw.c
index cd3647b9e7..3f70c89ce0 100644
--- a/src/gallium/drivers/freedreno/freedreno_draw.c
+++ b/src/gallium/drivers/freedreno/freedreno_draw.c
@@ -165,6 +165,15 @@ fd_draw_vbo(struct pipe_context *pctx, const struct 
pipe_draw_info *info)
foreach_bit(i, ctx->shaderbuf[PIPE_SHADER_FRAGMENT].enabled_mask)
resource_written(batch, 
ctx->shaderbuf[PIPE_SHADER_FRAGMENT].sb[i].buffer);
 
+   foreach_bit(i, ctx->shaderimg[PIPE_SHADER_FRAGMENT].enabled_mask) {
+   struct pipe_image_view *img =
+   >shaderimg[PIPE_SHADER_FRAGMENT].si[i];
+   if (img->access & PIPE_IMAGE_ACCESS_WRITE)
+   resource_written(batch, img->resource);
+   else
+   resource_read(batch, img->resource);
+   }
+
foreach_bit(i, ctx->constbuf[PIPE_SHADER_VERTEX].enabled_mask)
resource_read(batch, 
ctx->constbuf[PIPE_SHADER_VERTEX].cb[i].buffer);
foreach_bit(i, ctx->constbuf[PIPE_SHADER_FRAGMENT].enabled_mask)
@@ -440,6 +449,15 @@ fd_launch_grid(struct pipe_context *pctx, const struct 
pipe_grid_info *info)
foreach_bit(i, ctx->shaderbuf[PIPE_SHADER_COMPUTE].enabled_mask)
resource_read(batch, 
ctx->shaderbuf[PIPE_SHADER_COMPUTE].sb[i].buffer);
 
+   foreach_bit(i, ctx->shaderimg[PIPE_SHADER_COMPUTE].enabled_mask) {
+   struct pipe_image_view *img =
+   >shaderimg[PIPE_SHADER_COMPUTE].si[i];
+   if (img->access & PIPE_IMAGE_ACCESS_WRITE)
+   resource_written(batch, img->resource);
+   else
+   resource_read(batch, img->resource);
+   }
+
/* UBO's are read */
foreach_bit(i, ctx->constbuf[PIPE_SHADER_COMPUTE].enabled_mask)
resource_read(batch, 
ctx->constbuf[PIPE_SHADER_COMPUTE].cb[i].buffer);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): i965: Implement another VF cache invalidate workaround on Gen8+.

2017-11-16 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 8d48671492412e04c18651a779cabacf30ed0afe
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d48671492412e04c18651a779cabacf30ed0afe

Author: Kenneth Graunke 
Date:   Tue Nov 14 15:24:36 2017 -0800

i965: Implement another VF cache invalidate workaround on Gen8+.

...and provide a better citation for the existing one.

v2:
- Apply the workaround to Gen8 too, as intended (caught by Topi).
- Restructure to add bits instead of an extra flush (based on a similar
  patch by Rafael Antognolli).

Cc: mesa-sta...@lists.freedesktop.org
Reviewed-by: Rafael Antognolli 

---

 src/mesa/drivers/dri/i965/brw_pipe_control.c | 41 ++--
 1 file changed, 33 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_pipe_control.c 
b/src/mesa/drivers/dri/i965/brw_pipe_control.c
index 39e8bff730..c6e7dd15f4 100644
--- a/src/mesa/drivers/dri/i965/brw_pipe_control.c
+++ b/src/mesa/drivers/dri/i965/brw_pipe_control.c
@@ -119,14 +119,39 @@ brw_emit_pipe_control(struct brw_context *brw, uint32_t 
flags,
   if (devinfo->gen == 8)
  gen8_add_cs_stall_workaround_bits();
 
-  if (devinfo->gen == 9 &&
-  (flags & PIPE_CONTROL_VF_CACHE_INVALIDATE)) {
- /* Hardware workaround: SKL
-  *
-  * Emit Pipe Control with all bits set to zero before emitting
-  * a Pipe Control with VF Cache Invalidate set.
-  */
- brw_emit_pipe_control_flush(brw, 0);
+  if (flags & PIPE_CONTROL_VF_CACHE_INVALIDATE) {
+ if (devinfo->gen == 9) {
+/* The PIPE_CONTROL "VF Cache Invalidation Enable" bit description
+ * lists several workarounds:
+ *
+ *"Project: SKL, KBL, BXT
+ *
+ * If the VF Cache Invalidation Enable is set to a 1 in a
+ * PIPE_CONTROL, a separate Null PIPE_CONTROL, all bitfields
+ * sets to 0, with the VF Cache Invalidation Enable set to 0
+ * needs to be sent prior to the PIPE_CONTROL with VF Cache
+ * Invalidation Enable set to a 1."
+ */
+brw_emit_pipe_control_flush(brw, 0);
+ }
+
+ if (devinfo->gen >= 8) {
+/* THE PIPE_CONTROL "VF Cache Invalidation Enable" docs continue:
+ *
+ *"Project: BDW+
+ *
+ * When VF Cache Invalidate is set “Post Sync Operation” must
+ * be enabled to “Write Immediate Data” or “Write PS Depth
+ * Count” or “Write Timestamp”."
+ *
+ * If there's a BO, we're already doing some kind of write.
+ * If not, add a write to the workaround BO.
+ */
+if (!bo) {
+   flags |= PIPE_CONTROL_WRITE_IMMEDIATE;
+   bo = brw->workaround_bo;
+}
+ }
   }
 
   if (devinfo->gen == 10)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit