Mesa (master): swr: [rasterizer core] don' t construct pArContext on non-ar builds

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: a42c22fdbfcdd0d24a51e1575f2e1f3340bfbeda
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a42c22fdbfcdd0d24a51e1575f2e1f3340bfbeda

Author: Tim Rowley 
Date:   Thu Oct 13 20:57:05 2016 -0500

swr: [rasterizer core] don't construct pArContext on non-ar builds

Stops debug directory being created on non-ar builds.

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/core/api.cpp | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/gallium/drivers/swr/rasterizer/core/api.cpp 
b/src/gallium/drivers/swr/rasterizer/core/api.cpp
index 119dbde..2269240 100644
--- a/src/gallium/drivers/swr/rasterizer/core/api.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/api.cpp
@@ -112,9 +112,11 @@ HANDLE SwrCreateContext(
 pContext->ppScratch = new uint8_t*[pContext->NumWorkerThreads];
 pContext->pStats = new SWR_STATS[pContext->NumWorkerThreads];
 
+#if KNOB_ENABLE_AR
 // Setup ArchRast thread contexts which includes +1 for API thread.
 pContext->pArContext = new HANDLE[pContext->NumWorkerThreads+1];
 pContext->pArContext[pContext->NumWorkerThreads] = 
ArchRast::CreateThreadContext();
+#endif
 
 // Allocate scratch space for workers.
 ///@note We could lazily allocate this but its rather small amount of 
memory.
@@ -131,8 +133,10 @@ HANDLE SwrCreateContext(
 pContext->ppScratch[i] = (uint8_t*)AlignedMalloc(32 * 
sizeof(KILOBYTE), KNOB_SIMD_WIDTH * 4);
 #endif
 
+#if KNOB_ENABLE_AR
 // Initialize worker thread context for ArchRast.
 pContext->pArContext[i] = ArchRast::CreateThreadContext();
+#endif
 }
 
 // State setup AFTER context is fully initialized
@@ -379,7 +383,9 @@ void SwrDestroyContext(HANDLE hContext)
 AlignedFree(pContext->ppScratch[i]);
 #endif
 
+#if KNOB_ENABLE_AR
 ArchRast::DestroyThreadContext(pContext->pArContext[i]);
+#endif
 }
 
 delete[] pContext->ppScratch;

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


Mesa (master): swr: [rasterizer core] remove WorkerWaitForThreadEvent bucket

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: 29d07480b8e7b8e5529e6a824b7d99e9677a1816
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=29d07480b8e7b8e5529e6a824b7d99e9677a1816

Author: Tim Rowley 
Date:   Thu Oct 13 20:56:54 2016 -0500

swr: [rasterizer core] remove WorkerWaitForThreadEvent bucket

Cause of bucket stop capture hang, as threads get stuck in level 1.

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp | 1 -
 src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h   | 1 -
 src/gallium/drivers/swr/rasterizer/core/threads.cpp| 4 
 3 files changed, 6 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp 
b/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp
index 56eed25..99b9f55 100644
--- a/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.cpp
@@ -85,7 +85,6 @@ BUCKET_DESC gCoreBuckets[] = {
 { "BEOutputMerger", "", false, 0x },
 { "BEStoreTiles", "", true, 0xff00 },
 { "BEEndTile", "", false, 0x },
-{ "WorkerWaitForThreadEvent", "", false, 0x },
 };
 
 /// @todo bucketmanager and mapping should probably be a part of the SWR 
context
diff --git a/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h 
b/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h
index 11b3eae..733ee18 100644
--- a/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h
+++ b/src/gallium/drivers/swr/rasterizer/core/rdtsc_core.h
@@ -90,7 +90,6 @@ enum CORE_BUCKETS
 BEOutputMerger,
 BEStoreTiles,
 BEEndTile,
-WorkerWaitForThreadEvent,
 
 NumBuckets
 };
diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp 
b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
index a8864c7..ea5542a 100644
--- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
@@ -761,12 +761,8 @@ DWORD workerThreadMain(LPVOID pData)
 continue;
 }
 
-AR_BEGIN(WorkerWaitForThreadEvent, 0);
-
 pContext->FifosNotEmpty.wait(lock);
 lock.unlock();
-
-AR_END(WorkerWaitForThreadEvent, 0);
 }
 
 if (IsBEThread)

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


Mesa (master): swr: [rasterizer core] move binner functionality to separate file

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: ada27b503eab3c53d9ec1bca2cef48c5353e81f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ada27b503eab3c53d9ec1bca2cef48c5353e81f9

Author: Tim Rowley 
Date:   Thu Oct 13 12:30:34 2016 -0500

swr: [rasterizer core] move binner functionality to separate file

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/Makefile.sources   |1 +
 src/gallium/drivers/swr/rasterizer/core/binner.cpp | 1442 
 .../drivers/swr/rasterizer/core/frontend.cpp   | 1393 +--
 3 files changed, 1444 insertions(+), 1392 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=ada27b503eab3c53d9ec1bca2cef48c5353e81f9
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): swr: [rasterizer archrast] fix event file issue with saving data

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: bf1f46216cbe9e293e51a44187ee53a5b883c848
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf1f46216cbe9e293e51a44187ee53a5b883c848

Author: Tim Rowley 
Date:   Tue Oct 11 12:42:35 2016 -0500

swr: [rasterizer archrast] fix event file issue with saving data

Also, tagging stats with draw id to correlate these events with
draw/dispatch events.

Signed-off-by: Tim Rowley 

---

 .../drivers/swr/rasterizer/archrast/events.proto   |  8 +---
 src/gallium/drivers/swr/rasterizer/core/threads.cpp|  2 +-
 .../rasterizer/scripts/templates/ar_event_h.template   | 18 +++---
 .../scripts/templates/ar_eventhandlerfile_h.template   |  2 +-
 4 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/swr/rasterizer/archrast/events.proto 
b/src/gallium/drivers/swr/rasterizer/archrast/events.proto
index 6dccad6..4ddb7c9 100644
--- a/src/gallium/drivers/swr/rasterizer/archrast/events.proto
+++ b/src/gallium/drivers/swr/rasterizer/archrast/events.proto
@@ -99,7 +99,7 @@ event End
 
 event DrawInstancedEvent
 {
-uint32_t id;
+uint32_t drawId;
 uint32_t topology;
 uint32_t numVertices;
 int32_t  startVertex;
@@ -109,7 +109,7 @@ event DrawInstancedEvent
 
 event DrawIndexedInstancedEvent
 {
-uint32_t id;
+uint32_t drawId;
 uint32_t topology;
 uint32_t numIndices;
 int32_t  indexOffset;
@@ -120,7 +120,7 @@ event DrawIndexedInstancedEvent
 
 event DispatchEvent
 {
-uint32_t id;
+uint32_t drawId;
 uint32_t threadGroupCountX;
 uint32_t threadGroupCountY;
 uint32_t threadGroupCountZ;
@@ -134,6 +134,7 @@ event FrameEndEvent
 
 event FrontendStatsEvent
 {
+uint32_t drawId;
 uint64_t IaVertices;
 uint64_t IaPrimitives;
 uint64_t VsInvocations;
@@ -155,6 +156,7 @@ event FrontendStatsEvent
 
 event BackendStatsEvent
 {
+uint32_t drawId;
 uint64_t DepthPassCount;
 uint64_t PsInvocations;
 uint64_t CsInvocations;
diff --git a/src/gallium/drivers/swr/rasterizer/core/threads.cpp 
b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
index 6e7495c..a8864c7 100644
--- a/src/gallium/drivers/swr/rasterizer/core/threads.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/threads.cpp
@@ -570,7 +570,7 @@ INLINE void CompleteDrawFE(SWR_CONTEXT* pContext, uint32_t 
workerId, DRAW_CONTEX
 {
 SWR_STATS_FE& stats = pDC->dynState.statsFE;
 
-AR_EVENT(FrontendStatsEvent(
+AR_EVENT(FrontendStatsEvent(pDC->drawId,
 stats.IaVertices, stats.IaPrimitives, stats.VsInvocations, 
stats.HsInvocations,
 stats.DsInvocations, stats.GsInvocations, stats.GsPrimitives, 
stats.CInvocations, stats.CPrimitives,
 stats.SoPrimStorageNeeded[0], stats.SoPrimStorageNeeded[1], 
stats.SoPrimStorageNeeded[2], stats.SoPrimStorageNeeded[3],
diff --git 
a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template 
b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template
index c1576f7..e5c94c7 100644
--- a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template
+++ b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_event_h.template
@@ -56,9 +56,10 @@ namespace ArchRast
 % for name in protos['event_names']:
 
 //
-/// ${name}
+/// ${name}Data
 //
-struct ${name} : Event
+#pragma pack(push, 1)
+struct ${name}Data
 {<%
 field_names = protos['events'][name]['field_names']
 field_types = protos['events'][name]['field_types'] %>
@@ -66,6 +67,17 @@ namespace ArchRast
 % for i in range(len(field_names)):
 ${field_types[i]} ${field_names[i]};
 % endfor
+};
+#pragma pack(pop)
+
+//
+/// ${name}
+//
+struct ${name} : Event
+{<%
+field_names = protos['events'][name]['field_names']
+field_types = protos['events'][name]['field_types'] %>
+${name}Data data;
 
 // Constructor
 ${name}(
@@ -79,7 +91,7 @@ namespace ArchRast
 % endfor
 {
 % for i in range(len(field_names)):
-this->${field_names[i]} = ${field_names[i]};
+data.${field_names[i]} = ${field_names[i]};
 % endfor
 }
 
diff --git 
a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template
 
b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template
index 2e3b5c3..1924b15 100644
--- 
a/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template
+++ 
b/src/gallium/drivers/swr/rasterizer/scripts/templates/ar_eventhandlerfile_h.template
@@ -83,7 

Mesa (master): swr: [rasterizer scripts] add DEBUG_OUTPUT_DIR knob

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: f0a66c1da26eb35d2032b8100b96ad73aa22b836
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0a66c1da26eb35d2032b8100b96ad73aa22b836

Author: Tim Rowley 
Date:   Thu Oct 13 10:32:58 2016 -0500

swr: [rasterizer scripts] add DEBUG_OUTPUT_DIR knob

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py 
b/src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py
index b269545..3c6940d 100644
--- a/src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py
+++ b/src/gallium/drivers/swr/rasterizer/scripts/knob_defs.py
@@ -154,6 +154,13 @@ KNOBS = [
 }],
 
 
+['DEBUG_OUTPUT_DIR', {
+'type'  : 'std::string',
+'default'   : '/tmp/Rast/DebugOutput',
+'desc'  : ['Output directory for debug data.'],
+'category'  : 'debug',
+}],
+
 ['TOSS_DRAW', {
 'type'  : 'bool',
 'default'   : 'false',

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


Mesa (master): swr: [rasterizer core/sim] 8x2 backend + 16-wide tile clear /load/store

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: 488992221056edaf7111f9290afdf216c5e98d62
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=488992221056edaf7111f9290afdf216c5e98d62

Author: Tim Rowley 
Date:   Tue Oct 11 12:57:29 2016 -0500

swr: [rasterizer core/sim] 8x2 backend + 16-wide tile clear/load/store

Work in progress (disabled).

USE_8x2_TILE_BACKEND define in knobs.h enables AVX512 code paths
(emulated on non-AVX512 HW).

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/common/os.h |   3 +
 .../drivers/swr/rasterizer/common/simd16intrin.h   | 304 ++---
 .../drivers/swr/rasterizer/common/simdintrin.h |  93 +++-
 .../drivers/swr/rasterizer/core/backend.cpp|  95 -
 src/gallium/drivers/swr/rasterizer/core/backend.h  |  72 
 .../swr/rasterizer/core/format_conversion.h| 170 
 .../drivers/swr/rasterizer/core/format_types.h | 470 -
 src/gallium/drivers/swr/rasterizer/core/knobs.h|   7 +-
 .../drivers/swr/rasterizer/core/tilemgr.cpp|  83 
 src/gallium/drivers/swr/rasterizer/core/utils.h| 264 +++-
 .../drivers/swr/rasterizer/memory/LoadTile.h   |  16 +
 .../drivers/swr/rasterizer/memory/StoreTile.h  | 317 +-
 .../swr/rasterizer/memory/TilingFunctions.h| 101 +
 13 files changed, 1895 insertions(+), 100 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=488992221056edaf7111f9290afdf216c5e98d62
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): swr: [rasterizer core] fix comment typo

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: ffd0224303f1e9472fe832dcd9281a63fbb45e39
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ffd0224303f1e9472fe832dcd9281a63fbb45e39

Author: Tim Rowley 
Date:   Thu Oct 13 09:44:06 2016 -0500

swr: [rasterizer core] fix comment typo

Signed-off-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/core/api.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/swr/rasterizer/core/api.h 
b/src/gallium/drivers/swr/rasterizer/core/api.h
index 8ad40ea..fc66cfd 100644
--- a/src/gallium/drivers/swr/rasterizer/core/api.h
+++ b/src/gallium/drivers/swr/rasterizer/core/api.h
@@ -573,7 +573,7 @@ void SWR_API SwrClearRenderTarget(
 const SWR_RECT& clearRect);
 
 //
-/// @brief SwrSetRastyState
+/// @brief SwrSetRastState
 /// @param hContext - Handle passed back from SwrCreateContext
 /// @param pRastState - New SWR_RASTSTATE used for SwrDraw* commands
 void SWR_API SwrSetRastState(

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


Mesa (master): swr: [rasterizer common] fix assert index

2016-10-13 Thread Tim Rowley
Module: Mesa
Branch: master
Commit: 827e038062bb7247a7b59b8f97d07b4c1b7be276
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=827e038062bb7247a7b59b8f97d07b4c1b7be276

Author: Eric Engestrom 
Date:   Wed Oct 12 22:13:29 2016 +0100

swr: [rasterizer common] fix assert index

Fixes: b3bd8bb611bb465d2e5e ("swr: [rasterizer core] add support
   for "RAW" surface format")
CovID: 1373647
Signed-off-by: Eric Engestrom 
Reviewed-by: Tim Rowley 

---

 src/gallium/drivers/swr/rasterizer/common/formats.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/swr/rasterizer/common/formats.h 
b/src/gallium/drivers/swr/rasterizer/common/formats.h
index 539e37a..dd5b499 100644
--- a/src/gallium/drivers/swr/rasterizer/common/formats.h
+++ b/src/gallium/drivers/swr/rasterizer/common/formats.h
@@ -248,7 +248,7 @@ extern const SWR_FORMAT_INFO gFormatInfo[NUM_SWR_FORMATS];
 /// @param format - SWR format
 INLINE const SWR_FORMAT_INFO& GetFormatInfo(SWR_FORMAT format)
 {
-SWR_ASSERT(format <= NUM_SWR_FORMATS, "Invalid Surface Format: %d", 
format);
+SWR_ASSERT(format < NUM_SWR_FORMATS, "Invalid Surface Format: %d", format);
 SWR_ASSERT(gFormatInfo[format].name != nullptr, "Invalid Surface Format: 
%d", format);
 return gFormatInfo[format];
 }

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


Mesa (master): nv50: enable ARB_enhanced_layouts

2016-10-13 Thread Ilia Mirkin
Module: Mesa
Branch: master
Commit: afb6dc53bff58c137d07ca5b58c50debce5729d8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=afb6dc53bff58c137d07ca5b58c50debce5729d8

Author: Ilia Mirkin 
Date:   Thu Oct 13 21:39:42 2016 -0400

nv50: enable ARB_enhanced_layouts

Signed-off-by: Ilia Mirkin 

---

 docs/features.txt  | 4 ++--
 docs/relnotes/12.1.0.html  | 2 +-
 src/gallium/drivers/nouveau/nv50/nv50_screen.c | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/docs/features.txt b/docs/features.txt
index ec2634f..7713808 100644
--- a/docs/features.txt
+++ b/docs/features.txt
@@ -193,11 +193,11 @@ GL 4.4, GLSL 4.40 -- all DONE: i965/gen8+, radeonsi
   GL_MAX_VERTEX_ATTRIB_STRIDE   DONE (all drivers)
   GL_ARB_buffer_storage DONE (i965, nv50, 
nvc0, r600)
   GL_ARB_clear_texture  DONE (i965, nv50, 
nvc0, r600)
-  GL_ARB_enhanced_layouts   DONE (i965, llvmpipe, 
softpipe)
+  GL_ARB_enhanced_layouts   DONE (i965, nv50, 
nvc0, llvmpipe, softpipe)
   - compile-time constant expressions   DONE
   - explicit byte offsets for blocksDONE
   - forced alignment within blocks  DONE
-  - specified vec4-slot component numbers   DONE (i965, llvmpipe, 
softpipe)
+  - specified vec4-slot component numbers   DONE (i965, nv50, 
nvc0, llvmpipe, softpipe)
   - specified transform/feedback layout DONE
   - input/output block locationsDONE
   GL_ARB_multi_bind DONE (all drivers)
diff --git a/docs/relnotes/12.1.0.html b/docs/relnotes/12.1.0.html
index 20fd2cb..c7e4d01 100644
--- a/docs/relnotes/12.1.0.html
+++ b/docs/relnotes/12.1.0.html
@@ -51,7 +51,7 @@ Note: some of the new features are only available with 
certain drivers.
 GL_ARB_clear_texture on r600, radeonsi
 GL_ARB_compute_variable_group_size on nvc0, radeonsi
 GL_ARB_cull_distance on radeonsi
-GL_ARB_enhanced_layouts on i965, radeonsi, llvmpipe, softpipe
+GL_ARB_enhanced_layouts on i965, nv50, nvc0, radeonsi, llvmpipe, 
softpipe
 GL_ARB_indirect_parameters on radeonsi
 GL_ARB_query_buffer_object on radeonsi
 GL_ARB_shader_draw_parameters on radeonsi
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 99ad90a..2901730 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -197,6 +197,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_INVALIDATE_BUFFER:
case PIPE_CAP_STRING_MARKER:
case PIPE_CAP_CULL_DISTANCE:
+   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
   return 1;
case PIPE_CAP_SEAMLESS_CUBE_MAP:
   return 1; /* class_3d >= NVA0_3D_CLASS; */
@@ -253,7 +254,6 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_TGSI_VOTE:
case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
-   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
   return 0;
 
case PIPE_CAP_VENDOR_ID:

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


Mesa (master): nvc0/ir: be more careful about preserving modifiers in SHLADD creation

2016-10-13 Thread Ilia Mirkin
Module: Mesa
Branch: master
Commit: a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df

Author: Ilia Mirkin 
Date:   Wed Oct 12 13:30:57 2016 -0400

nvc0/ir: be more careful about preserving modifiers in SHLADD creation

src2 was being given the wrong modifier, and we were not properly
managing the modifier on the SHL source either.

Signed-off-by: Ilia Mirkin 
Reviewed-by: Samuel Pitoiset 

---

 src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 12 +---
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
index d88bb34..737bda3 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
@@ -2163,7 +2163,6 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add)
Value *src1 = add->getSrc(1);
ImmediateValue imm;
Instruction *shl;
-   Modifier mod[2];
Value *src;
int s;
 
@@ -2182,20 +2181,19 @@ LateAlgebraicOpt::tryADDToSHLADD(Instruction *add)
src = add->getSrc(s);
shl = src->getUniqueInsn();
 
-   if (shl->bb != add->bb || shl->usesFlags() || shl->subOp)
+   if (shl->bb != add->bb || shl->usesFlags() || shl->subOp || shl->src(0).mod)
   return false;
 
if (!shl->src(1).getImmediate(imm))
   return false;
 
-   mod[0] = add->src(0).mod;
-   mod[1] = add->src(1).mod;
-
add->op = OP_SHLADD;
add->setSrc(2, add->src(!s));
-   add->src(2).mod = mod[s];
-
+   // SHL can't have any modifiers, but the ADD source may have had
+   // one. Preserve it.
add->setSrc(0, shl->getSrc(0));
+   if (s == 1)
+  add->src(0).mod = add->src(1).mod;
add->setSrc(1, new_ImmediateValue(shl->bb->getProgram(), imm.reg.data.u32));
add->src(1).mod = Modifier(0);
 

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


Mesa (master): mesa: remove needless cast in update_array()

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: d6b00021950a03fc6ff39e63f4c079b956c80c92
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6b00021950a03fc6ff39e63f4c079b956c80c92

Author: Brian Paul 
Date:   Fri Oct  7 15:09:20 2016 -0600

mesa: remove needless cast in update_array()

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/varray.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 6c41a5c..9acd868 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -527,7 +527,7 @@ update_array(struct gl_context *ctx,
/* The Stride and Ptr fields are not set by update_array_format() */
array = >VertexAttrib[attrib];
array->Stride = stride;
-   array->Ptr = (const GLvoid *) ptr;
+   array->Ptr = ptr;
 
/* Update the vertex buffer binding */
effectiveStride = stride != 0 ? stride : array->_ElementSize;

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


Mesa (master): tgsi: fix comment typo in tgsi_ureg.c

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: b81546d43c4ae670babfc496f7d5cce1c1a22399
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b81546d43c4ae670babfc496f7d5cce1c1a22399

Author: Brian Paul 
Date:   Tue Oct 11 15:25:24 2016 -0600

tgsi: fix comment typo in tgsi_ureg.c

Trivial.

---

 src/gallium/auxiliary/tgsi/tgsi_ureg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c 
b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index ede648e..7bcd242 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -513,7 +513,7 @@ ureg_DECL_constant2D(struct ureg_program *ureg,
 }
 
 
-/* A one-dimensional, depricated version of ureg_DECL_constant2D().
+/* A one-dimensional, deprecated version of ureg_DECL_constant2D().
  *
  * Constant operands declared with this function must be addressed
  * with a one-dimensional index.

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


Mesa (master): mesa: rename some vars in arrayobj.c

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: c328268b9292664bd5de73ee39ed8b91ccfb38d1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c328268b9292664bd5de73ee39ed8b91ccfb38d1

Author: Brian Paul 
Date:   Thu Oct  6 17:16:51 2016 -0600

mesa: rename some vars in arrayobj.c

Use 'vao' instead of 'obj' to be consistent with other code.
Plus, add a comment.

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/arrayobj.c | 55 +++-
 1 file changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 2d3b69c..fe11686 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -223,13 +223,20 @@ _mesa_reference_vao_(struct gl_context *ctx,
 }
 
 
-
+/**
+ * Initialize attribtes of a vertex array within a vertex array object.
+ * \param vao  the container vertex array object
+ * \param index  which array in the VAO to initialize
+ * \param size  number of components (1, 2, 3 or 4) per attribute
+ * \param type  datatype of the attribute (GL_FLOAT, GL_INT, etc).
+ */
 static void
 init_array(struct gl_context *ctx,
-   struct gl_vertex_array_object *obj, GLuint index, GLint size, GLint 
type)
+   struct gl_vertex_array_object *vao,
+   GLuint index, GLint size, GLint type)
 {
-   struct gl_vertex_attrib_array *array = >VertexAttrib[index];
-   struct gl_vertex_buffer_binding *binding = >VertexBinding[index];
+   struct gl_vertex_attrib_array *array = >VertexAttrib[index];
+   struct gl_vertex_buffer_binding *binding = >VertexBinding[index];
 
array->Size = size;
array->Type = type;
@@ -260,47 +267,47 @@ init_array(struct gl_context *ctx,
  */
 void
 _mesa_initialize_vao(struct gl_context *ctx,
- struct gl_vertex_array_object *obj,
+ struct gl_vertex_array_object *vao,
  GLuint name)
 {
GLuint i;
 
-   obj->Name = name;
+   vao->Name = name;
 
-   mtx_init(>Mutex, mtx_plain);
-   obj->RefCount = 1;
+   mtx_init(>Mutex, mtx_plain);
+   vao->RefCount = 1;
 
/* Init the individual arrays */
-   for (i = 0; i < ARRAY_SIZE(obj->VertexAttrib); i++) {
+   for (i = 0; i < ARRAY_SIZE(vao->VertexAttrib); i++) {
   switch (i) {
   case VERT_ATTRIB_WEIGHT:
- init_array(ctx, obj, VERT_ATTRIB_WEIGHT, 1, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_WEIGHT, 1, GL_FLOAT);
  break;
   case VERT_ATTRIB_NORMAL:
- init_array(ctx, obj, VERT_ATTRIB_NORMAL, 3, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_NORMAL, 3, GL_FLOAT);
  break;
   case VERT_ATTRIB_COLOR1:
- init_array(ctx, obj, VERT_ATTRIB_COLOR1, 3, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_COLOR1, 3, GL_FLOAT);
  break;
   case VERT_ATTRIB_FOG:
- init_array(ctx, obj, VERT_ATTRIB_FOG, 1, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_FOG, 1, GL_FLOAT);
  break;
   case VERT_ATTRIB_COLOR_INDEX:
- init_array(ctx, obj, VERT_ATTRIB_COLOR_INDEX, 1, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_COLOR_INDEX, 1, GL_FLOAT);
  break;
   case VERT_ATTRIB_EDGEFLAG:
- init_array(ctx, obj, VERT_ATTRIB_EDGEFLAG, 1, GL_BOOL);
+ init_array(ctx, vao, VERT_ATTRIB_EDGEFLAG, 1, GL_BOOL);
  break;
   case VERT_ATTRIB_POINT_SIZE:
- init_array(ctx, obj, VERT_ATTRIB_POINT_SIZE, 1, GL_FLOAT);
+ init_array(ctx, vao, VERT_ATTRIB_POINT_SIZE, 1, GL_FLOAT);
  break;
   default:
- init_array(ctx, obj, i, 4, GL_FLOAT);
+ init_array(ctx, vao, i, 4, GL_FLOAT);
  break;
   }
}
 
-   _mesa_reference_buffer_object(ctx, >IndexBufferObj,
+   _mesa_reference_buffer_object(ctx, >IndexBufferObj,
  ctx->Shared->NullBufferObj);
 }
 
@@ -309,11 +316,11 @@ _mesa_initialize_vao(struct gl_context *ctx,
  * Add the given array object to the array object pool.
  */
 static void
-save_array_object( struct gl_context *ctx, struct gl_vertex_array_object *obj )
+save_array_object(struct gl_context *ctx, struct gl_vertex_array_object *vao)
 {
-   if (obj->Name > 0) {
+   if (vao->Name > 0) {
   /* insert into hash table */
-  _mesa_HashInsert(ctx->Array.Objects, obj->Name, obj);
+  _mesa_HashInsert(ctx->Array.Objects, vao->Name, vao);
}
 }
 
@@ -323,11 +330,11 @@ save_array_object( struct gl_context *ctx, struct 
gl_vertex_array_object *obj )
  * Do not deallocate the array object though.
  */
 static void
-remove_array_object( struct gl_context *ctx, struct gl_vertex_array_object 
*obj )
+remove_array_object(struct gl_context *ctx, struct gl_vertex_array_object *vao)
 {
-   if (obj->Name > 0) {
+   if (vao->Name > 0) {
   /* remove from hash table */
-  _mesa_HashRemove(ctx->Array.Objects, obj->Name);
+  _mesa_HashRemove(ctx->Array.Objects, vao->Name);
}
 }
 


Mesa (master): mesa: rename gl_vertex_attrib_array::VertexBinding

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: c89802aeeaee35e06c98a41dd630a60e8e7e4123
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c89802aeeaee35e06c98a41dd630a60e8e7e4123

Author: Brian Paul 
Date:   Thu Oct  6 17:21:09 2016 -0600

mesa: rename gl_vertex_attrib_array::VertexBinding

Rename to gl_vertex_attrib_array::BufferBindingIndex because this field
is an index into the array of buffer binding points.  This makes some
code a little easier to follow since there's also a "VertexBinding" field
in gl_vertex_array_object.

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/api_arrayelt.c  | 20 ++--
 src/mesa/main/arrayobj.c  |  8 
 src/mesa/main/mtypes.h|  2 +-
 src/mesa/main/varray.c| 16 
 src/mesa/vbo/vbo_exec_array.c |  6 +++---
 5 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
index 15fbb8c..cc7dee3 100644
--- a/src/mesa/main/api_arrayelt.c
+++ b/src/mesa/main/api_arrayelt.c
@@ -1566,7 +1566,7 @@ _ae_update_state(struct gl_context *ctx)
/* conventional vertex arrays */
if (vao->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_COLOR_INDEX];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = IndexFuncs[TYPE_IDX(aa->array->Type)];
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1574,7 +1574,7 @@ _ae_update_state(struct gl_context *ctx)
 
if (vao->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_EDGEFLAG];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = _gloffset_EdgeFlagv;
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1582,7 +1582,7 @@ _ae_update_state(struct gl_context *ctx)
 
if (vao->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_NORMAL];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = NormalFuncs[TYPE_IDX(aa->array->Type)];
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1590,7 +1590,7 @@ _ae_update_state(struct gl_context *ctx)
 
if (vao->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_COLOR0];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = ColorFuncs[aa->array->Size-3][TYPE_IDX(aa->array->Type)];
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1598,7 +1598,7 @@ _ae_update_state(struct gl_context *ctx)
 
if (vao->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_COLOR1];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = SecondaryColorFuncs[TYPE_IDX(aa->array->Type)];
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1606,7 +1606,7 @@ _ae_update_state(struct gl_context *ctx)
 
if (vao->VertexAttrib[VERT_ATTRIB_FOG].Enabled) {
   aa->array = >VertexAttrib[VERT_ATTRIB_FOG];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = >VertexBinding[aa->array->BufferBindingIndex];
   aa->offset = FogCoordFuncs[TYPE_IDX(aa->array->Type)];
   check_vbo(actx, aa->binding->BufferObj);
   aa++;
@@ -1620,7 +1620,7 @@ _ae_update_state(struct gl_context *ctx)
   * If we ever remove GL_NV_vertex_program this will have to change.
   */
  at->array = attribArray;
- at->binding = >VertexBinding[attribArray->VertexBinding];
+ at->binding = >VertexBinding[attribArray->BufferBindingIndex];
  assert(!at->array->Normalized);
  at->func = AttribFuncsNV[at->array->Normalized]
  [at->array->Size-1]
@@ -1638,7 +1638,7 @@ _ae_update_state(struct gl_context *ctx)
   if (attribArray->Enabled) {
  GLint intOrNorm;
  at->array = attribArray;
- at->binding = >VertexBinding[attribArray->VertexBinding];
+ at->binding = >VertexBinding[attribArray->BufferBindingIndex];
  /* Note: we can't grab the _glapi_Dispatch->VertexAttrib1fvNV
   * function pointer here (for float arrays) since the pointer may
   * change from one execution of _ae_ArrayElement() to
@@ -1669,7 +1669,7 @@ _ae_update_state(struct gl_context *ctx)
* issued as the last (provoking) attribute).
*/
   aa->array = >VertexAttrib[VERT_ATTRIB_GENERIC0];
-  aa->binding = >VertexBinding[aa->array->VertexBinding];
+  aa->binding = 

Mesa (master): vbo: simplify some code in check_draw_elements_data()

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 0de9265b1f10a791044342a05829b72f0cc133dc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0de9265b1f10a791044342a05829b72f0cc133dc

Author: Brian Paul 
Date:   Fri Oct  7 15:03:55 2016 -0600

vbo: simplify some code in check_draw_elements_data()

Use the 'vao' local var in more places.

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/vbo/vbo_exec_array.c | 9 -
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 1425e0b..dc1ef76 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -128,11 +128,11 @@ check_draw_elements_data(struct gl_context *ctx, GLsizei 
count, GLenum elemType,
GLint i;
GLuint k;
 
-   if (_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) {
+   if (_mesa_is_bufferobj(vao->IndexBufferObj)) {
   elemMap = ctx->Driver.MapBufferRange(ctx, 0,
-  ctx->Array.VAO->IndexBufferObj->Size,
+  vao->IndexBufferObj->Size,
   GL_MAP_READ_BIT,
-  ctx->Array.VAO->IndexBufferObj,
+  vao->IndexBufferObj,
MAP_INTERNAL);
   elements = ADD_POINTERS(elements, elemMap);
}
@@ -162,8 +162,7 @@ check_draw_elements_data(struct gl_context *ctx, GLsizei 
count, GLenum elemType,
}
 
if (_mesa_is_bufferobj(vao->IndexBufferObj)) {
-  ctx->Driver.UnmapBuffer(ctx, ctx->Array.VAO->IndexBufferObj,
-  MAP_INTERNAL);
+  ctx->Driver.UnmapBuffer(ctx, vao->IndexBufferObj, MAP_INTERNAL);
}
 
for (k = 0; k < VERT_ATTRIB_MAX; k++) {

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


Mesa (master): mesa: replace gl_framebuffer:: _IntegerColor wih _IntegerBuffers

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: ff00ab745c9a9d6ef35239ea656a5db0c76de52d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff00ab745c9a9d6ef35239ea656a5db0c76de52d

Author: Brian Paul 
Date:   Mon Oct 10 11:29:14 2016 -0600

mesa: replace gl_framebuffer::_IntegerColor wih _IntegerBuffers

Use a bitmask to indicate which color buffers are integer-valued, rather
than a bool.  Also, the old field was mis-computed.  If an integer buffer
was followed by a non-integer buffer, the _IntegerColor field was wrongly
set to false.

This fixes the new piglit gl-3.1-mixed-int-float-fbo test.

Reviewed-by: Marek Olšák 

---

 src/mesa/drivers/common/meta.c   |  2 +-
 src/mesa/main/api_validate.c |  2 +-
 src/mesa/main/blend.c|  2 +-
 src/mesa/main/fbobject.c | 10 ++
 src/mesa/main/get.c  |  4 
 src/mesa/main/get_hash_params.py |  2 +-
 src/mesa/main/mtypes.h   |  3 +--
 7 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
index fdc4748..890e98a 100644
--- a/src/mesa/drivers/common/meta.c
+++ b/src/mesa/drivers/common/meta.c
@@ -1750,7 +1750,7 @@ meta_clear(struct gl_context *ctx, GLbitfield buffers, 
bool glsl)
   z = invert_z(ctx->Depth.Clear);
}
 
-   if (fb->_IntegerColor) {
+   if (fb->_IntegerBuffers) {
   assert(glsl);
   _mesa_meta_use_program(ctx, clear->IntegerShaderProg);
   _mesa_Uniform4iv(0, 1, ctx->Color.ClearColor.i);
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index c3c5a69..d3b4cab 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -152,7 +152,7 @@ _mesa_valid_to_render(struct gl_context *ctx, const char 
*where)
  /* If drawing to integer-valued color buffers, there must be an
   * active fragment shader (GL_EXT_texture_integer).
   */
- if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerColor) {
+ if (ctx->DrawBuffer && ctx->DrawBuffer->_IntegerBuffers) {
 _mesa_error(ctx, GL_INVALID_OPERATION,
 "%s(integer format but no fragment shader)", where);
 return GL_FALSE;
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index ad79ee0..0322799 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -945,7 +945,7 @@ _mesa_update_clamp_fragment_color(struct gl_context *ctx,
 * - there is an integer colorbuffer
 */
if (!drawFb || !drawFb->_HasSNormOrFloatColorBuffer ||
-   drawFb->_IntegerColor)
+   drawFb->_IntegerBuffers)
   ctx->Color._ClampFragmentColor = GL_FALSE;
else
   ctx->Color._ClampFragmentColor =
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 3b55e79..9204606 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -970,6 +970,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fb->_AllColorBuffersFixedPoint = GL_TRUE;
fb->_HasSNormOrFloatColorBuffer = GL_FALSE;
fb->_HasAttachments = true;
+   fb->_IntegerBuffers = 0;
 
/* Start at -2 to more easily loop over all attachment points.
 *  -2: depth buffer
@@ -1090,13 +1091,14 @@ _mesa_test_framebuffer_completeness(struct gl_context 
*ctx,
  continue;
   }
 
-  /* check if integer color */
-  fb->_IntegerColor = _mesa_is_format_integer_color(attFormat);
-
-  /* Update _AllColorBuffersFixedPoint and _HasSNormOrFloatColorBuffer. */
+  /* Update flags describing color buffer datatypes */
   if (i >= 0) {
  GLenum type = _mesa_get_format_datatype(attFormat);
 
+ /* check if integer color */
+ if (_mesa_is_format_integer_color(attFormat))
+fb->_IntegerBuffers |= (1 << i);
+
  fb->_AllColorBuffersFixedPoint =
 fb->_AllColorBuffersFixedPoint &&
 (type == GL_UNSIGNED_NORMALIZED || type == GL_SIGNED_NORMALIZED);
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index bd85bef..c11bcde 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -1076,6 +1076,10 @@ find_custom_value(struct gl_context *ctx, const struct 
value_desc *d, union valu
case GL_SAMPLE_BUFFERS:
   v->value_int = _mesa_geometric_samples(ctx->DrawBuffer) > 0;
   break;
+   /* GL_EXT_textrue_integer */
+   case GL_RGBA_INTEGER_MODE_EXT:
+  v->value_int = (ctx->DrawBuffer->_IntegerBuffers != 0);
+  break;
/* GL_ATI_meminfo & GL_NVX_gpu_memory_info */
case GL_VBO_FREE_MEMORY_ATI:
case GL_TEXTURE_FREE_MEMORY_ATI:
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index 6849b5b..3c6b712 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -890,7 +890,7 @@ descriptor=[
   [ "TEXTURE_CUBE_MAP_SEAMLESS", "CONTEXT_BOOL(Texture.CubeMapSeamless), 
extra_ARB_seamless_cube_map" ],
 
 # GL_EXT_texture_integer
-  [ "RGBA_INTEGER_MODE_EXT", 

Mesa (master): mesa: remove 'params' parameter from ctx-> Driver.TexParameter()

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: a710c21ac200fc1c80a6209862e837f0a75f4cc5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a710c21ac200fc1c80a6209862e837f0a75f4cc5

Author: Brian Paul 
Date:   Fri Oct  7 14:28:21 2016 -0600

mesa: remove 'params' parameter from ctx->Driver.TexParameter()

None of the drivers which implement this hook do anything with the
texture parameter value.  Drivers just look at the pname and set a
dirty flag if needed.

We were doing some ugly casting and type conversion to setup the
argument so that all goes away.

Reviewed-by: Marek Olšák 

---

 src/mesa/drivers/dri/nouveau/nouveau_state.c |  3 +--
 src/mesa/drivers/dri/r200/r200_tex.c |  6 +++---
 src/mesa/drivers/dri/radeon/radeon_tex.c |  2 +-
 src/mesa/main/dd.h   |  5 ++---
 src/mesa/main/teximage.c |  6 ++
 src/mesa/main/texobj.c   | 15 ++-
 src/mesa/main/texparam.c | 17 -
 src/mesa/state_tracker/st_cb_texture.c   |  3 +--
 8 files changed, 20 insertions(+), 37 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c 
b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index 6189997..de36fa4 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -395,8 +395,7 @@ nouveau_tex_env(struct gl_context *ctx, GLenum target, 
GLenum pname,
 
 static void
 nouveau_tex_parameter(struct gl_context *ctx,
- struct gl_texture_object *t, GLenum pname,
- const GLfloat *params)
+ struct gl_texture_object *t, GLenum pname)
 {
switch (pname) {
case GL_TEXTURE_MAG_FILTER:
diff --git a/src/mesa/drivers/dri/r200/r200_tex.c 
b/src/mesa/drivers/dri/r200/r200_tex.c
index ca92110..2a95f2d 100644
--- a/src/mesa/drivers/dri/r200/r200_tex.c
+++ b/src/mesa/drivers/dri/r200/r200_tex.c
@@ -374,9 +374,9 @@ void r200TexUpdateParameters(struct gl_context *ctx, GLuint 
unit)
  * Changes variables and flags for a state update, which will happen at the
  * next UpdateTextureState
  */
-static void r200TexParameter( struct gl_context *ctx,
-   struct gl_texture_object *texObj,
-   GLenum pname, const GLfloat *params )
+static void r200TexParameter(struct gl_context *ctx,
+ struct gl_texture_object *texObj,
+ GLenum pname)
 {
radeonTexObj* t = radeon_tex_obj(texObj);
 
diff --git a/src/mesa/drivers/dri/radeon/radeon_tex.c 
b/src/mesa/drivers/dri/radeon/radeon_tex.c
index d1aa1a1..083a5e1 100644
--- a/src/mesa/drivers/dri/radeon/radeon_tex.c
+++ b/src/mesa/drivers/dri/radeon/radeon_tex.c
@@ -329,7 +329,7 @@ void radeonTexUpdateParameters(struct gl_context *ctx, 
GLuint unit)
 
 static void radeonTexParameter( struct gl_context *ctx,
struct gl_texture_object *texObj,
-   GLenum pname, const GLfloat *params )
+   GLenum pname )
 {
radeonTexObj* t = radeon_tex_obj(texObj);
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 7f53271..1d75b9f 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -610,10 +610,9 @@ struct dd_function_table {
/** Set texture environment parameters */
void (*TexEnv)(struct gl_context *ctx, GLenum target, GLenum pname,
   const GLfloat *param);
-   /** Set texture parameters */
+   /** Set texture parameter (callee gets param value from the texObj) */
void (*TexParameter)(struct gl_context *ctx,
-struct gl_texture_object *texObj,
-GLenum pname, const GLfloat *params);
+struct gl_texture_object *texObj, GLenum pname);
/** Set the viewport */
void (*Viewport)(struct gl_context *ctx);
/*@}*/
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index 411ec49..bc3b76a 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -5082,12 +5082,10 @@ texture_buffer_range(struct gl_context *ctx,
 
if (ctx->Driver.TexParameter) {
   if (offset != oldOffset) {
- ctx->Driver.TexParameter(ctx, texObj, GL_TEXTURE_BUFFER_OFFSET,
-  (const GLfloat *) );
+ ctx->Driver.TexParameter(ctx, texObj, GL_TEXTURE_BUFFER_OFFSET);
   }
   if (size != oldSize) {
- ctx->Driver.TexParameter(ctx, texObj, GL_TEXTURE_BUFFER_SIZE,
-  (const GLfloat *) );
+ ctx->Driver.TexParameter(ctx, texObj, GL_TEXTURE_BUFFER_SIZE);
   }
}
 
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index 9a051bc..fbd498d 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -365,15 +365,12 @@ finish_texture_init(struct gl_context *ctx, GLenum target,
  obj->Sampler.MinFilter 

Mesa (master): mesa: rename gl_vertex_attrib_array gl_array_attributes

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 15fb88e912531110f1a31ede2100910fdda2823e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=15fb88e912531110f1a31ede2100910fdda2823e

Author: Brian Paul 
Date:   Thu Oct  6 17:30:20 2016 -0600

mesa: rename gl_vertex_attrib_array gl_array_attributes

The structure contains the attributes of a vertex array.  The old name
was kind of confusing.

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/api_arrayelt.c |  8 
 src/mesa/main/arrayobj.c |  8 
 src/mesa/main/get.c  |  2 +-
 src/mesa/main/get_hash_params.py |  8 
 src/mesa/main/mtypes.h   |  6 +++---
 src/mesa/main/varray.c   | 14 +++---
 src/mesa/main/varray.h   |  8 
 src/mesa/vbo/vbo_exec_array.c|  8 
 8 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/src/mesa/main/api_arrayelt.c b/src/mesa/main/api_arrayelt.c
index cc7dee3..54cdb50 100644
--- a/src/mesa/main/api_arrayelt.c
+++ b/src/mesa/main/api_arrayelt.c
@@ -48,7 +48,7 @@
 typedef void (GLAPIENTRY *array_func)( const void * );
 
 typedef struct {
-   const struct gl_vertex_attrib_array *array;
+   const struct gl_array_attributes *array;
const struct gl_vertex_buffer_binding *binding;
int offset;
 } AEarray;
@@ -56,7 +56,7 @@ typedef struct {
 typedef void (GLAPIENTRY *attrib_func)( GLuint indx, const void *data );
 
 typedef struct {
-   const struct gl_vertex_attrib_array *array;
+   const struct gl_array_attributes *array;
const struct gl_vertex_buffer_binding *binding;
attrib_func func;
GLuint index;
@@ -1613,7 +1613,7 @@ _ae_update_state(struct gl_context *ctx)
}
 
for (i = 0; i < ctx->Const.MaxTextureCoordUnits; i++) {
-  struct gl_vertex_attrib_array *attribArray =
+  struct gl_array_attributes *attribArray =
  >VertexAttrib[VERT_ATTRIB_TEX(i)];
   if (attribArray->Enabled) {
  /* NOTE: we use generic glVertexAttribNV functions here.
@@ -1633,7 +1633,7 @@ _ae_update_state(struct gl_context *ctx)
 
/* generic vertex attribute arrays */
for (i = 1; i < VERT_ATTRIB_GENERIC_MAX; i++) {  /* skip zero! */
-  struct gl_vertex_attrib_array *attribArray =
+  struct gl_array_attributes *attribArray =
  >VertexAttrib[VERT_ATTRIB_GENERIC(i)];
   if (attribArray->Enabled) {
  GLint intOrNorm;
diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c
index 8258964..11e3482 100644
--- a/src/mesa/main/arrayobj.c
+++ b/src/mesa/main/arrayobj.c
@@ -235,7 +235,7 @@ init_array(struct gl_context *ctx,
struct gl_vertex_array_object *vao,
GLuint index, GLint size, GLint type)
 {
-   struct gl_vertex_attrib_array *array = >VertexAttrib[index];
+   struct gl_array_attributes *array = >VertexAttrib[index];
struct gl_vertex_buffer_binding *binding = >VertexBinding[index];
 
array->Size = size;
@@ -353,7 +353,7 @@ _mesa_update_vao_client_arrays(struct gl_context *ctx,
   const int attrib = u_bit_scan64();
 
   struct gl_client_array *client_array;
-  struct gl_vertex_attrib_array *attrib_array;
+  struct gl_array_attributes *attrib_array;
   struct gl_vertex_buffer_binding *buffer_binding;
 
   attrib_array = >VertexAttrib[attrib];
@@ -377,7 +377,7 @@ _mesa_all_varyings_in_vbos(const struct 
gl_vertex_array_object *vao)
* attrib arrays at once
*/
   const int i = ffsll(mask) - 1;
-  const struct gl_vertex_attrib_array *attrib_array =
+  const struct gl_array_attributes *attrib_array =
  >VertexAttrib[i];
   const struct gl_vertex_buffer_binding *buffer_binding =
  >VertexBinding[attrib_array->BufferBindingIndex];
@@ -408,7 +408,7 @@ _mesa_all_buffers_are_unmapped(const struct 
gl_vertex_array_object *vao)
 
while (mask) {
   const int i = ffsll(mask) - 1;
-  const struct gl_vertex_attrib_array *attrib_array =
+  const struct gl_array_attributes *attrib_array =
  >VertexAttrib[i];
   const struct gl_vertex_buffer_binding *buffer_binding =
  >VertexBinding[attrib_array->BufferBindingIndex];
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index c11bcde..6234f6e 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -607,7 +607,7 @@ static void
 find_custom_value(struct gl_context *ctx, const struct value_desc *d, union 
value *v)
 {
struct gl_buffer_object **buffer_obj;
-   struct gl_vertex_attrib_array *array;
+   struct gl_array_attributes *array;
GLuint unit, *p;
 
switch (d->pname) {
diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index 3c6b712..5237180 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -217,10 +217,10 @@ descriptor=[
   [ "COLOR_ARRAY_SIZE", "LOC_CUSTOM, TYPE_INT, 0, NO_EXTRA" ],
   [ "COLOR_ARRAY_TYPE", "ARRAY_ENUM(VertexAttrib[VERT_ATTRIB_COLOR0].Type), 
NO_EXTRA" ],
  

Mesa (master): mesa: fix indentation in vertex_attrib_binding()

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 3a2869aacabc0021d757de0a6055e1e530d82e81
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a2869aacabc0021d757de0a6055e1e530d82e81

Author: Brian Paul 
Date:   Fri Oct  7 15:31:34 2016 -0600

mesa: fix indentation in vertex_attrib_binding()

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/varray.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 0fb..db821e3 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -136,9 +136,9 @@ vertex_attrib_binding(struct gl_context *ctx,
struct gl_array_attributes *array = >VertexAttrib[attribIndex];
 
if (!_mesa_is_bufferobj(vao->VertexBinding[bindingIndex].BufferObj))
- vao->VertexAttribBufferMask &= ~VERT_BIT(attribIndex);
+  vao->VertexAttribBufferMask &= ~VERT_BIT(attribIndex);
else
- vao->VertexAttribBufferMask |= VERT_BIT(attribIndex);
+  vao->VertexAttribBufferMask |= VERT_BIT(attribIndex);
 
if (array->BufferBindingIndex != bindingIndex) {
   const GLbitfield64 array_bit = VERT_BIT(attribIndex);

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


Mesa (master): mesa: add sanity check assertion in update_array_format

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 743a52637258a602eb4ea891b5c3bca0032724c7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=743a52637258a602eb4ea891b5c3bca0032724c7

Author: Brian Paul 
Date:   Fri Oct  7 15:21:58 2016 -0600

mesa: add sanity check assertion in update_array_format

At most, one of the normalized, integer, doubles bools can be true.

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/varray.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 9acd868..0fb 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -333,6 +333,9 @@ update_array_format(struct gl_context *ctx,
GLbitfield typeBit;
GLenum format = GL_RGBA;
 
+   /* at most, one of these bools can be true */
+   assert((int) normalized + (int) integer + (int) doubles <= 1);
+
if (ctx->Array.LegalTypesMask == 0 || ctx->Array.LegalTypesMaskAPI != 
ctx->API) {
   /* Compute the LegalTypesMask only once, unless the context API has
* changed, in which case we want to compute it again.  We can't do this

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


Mesa (master): mesa: simplify update_array() with a vao local var

2016-10-13 Thread Brian Paul
Module: Mesa
Branch: master
Commit: 74745dcfa4c17c9d1ec3ce5021bab76fdb4d3b3b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=74745dcfa4c17c9d1ec3ce5021bab76fdb4d3b3b

Author: Brian Paul 
Date:   Fri Oct  7 15:08:50 2016 -0600

mesa: simplify update_array() with a vao local var

Reviewed-by: Mathias Fröhlich 

---

 src/mesa/main/varray.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index 781d763..6c41a5c 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -465,6 +465,7 @@ update_array(struct gl_context *ctx,
  GLboolean normalized, GLboolean integer, GLboolean doubles,
  const GLvoid *ptr)
 {
+   struct gl_vertex_array_object *vao = ctx->Array.VAO;
struct gl_array_attributes *array;
GLsizei effectiveStride;
 
@@ -478,8 +479,7 @@ update_array(struct gl_context *ctx,
 *
 * The check for VBOs is handled below.
 */
-   if (ctx->API == API_OPENGL_CORE
-   && (ctx->Array.VAO == ctx->Array.DefaultVAO)) {
+   if (ctx->API == API_OPENGL_CORE && (vao == ctx->Array.DefaultVAO)) {
   _mesa_error(ctx, GL_INVALID_OPERATION, "%s(no array object bound)",
   func);
   return;
@@ -509,29 +509,29 @@ update_array(struct gl_context *ctx,
 *   to the ARRAY_BUFFER buffer object binding point (see section
 *   2.9.6), and the pointer argument is not NULL."
 */
-   if (ptr != NULL && ctx->Array.VAO->ARBsemantics &&
+   if (ptr != NULL && vao->ARBsemantics &&
!_mesa_is_bufferobj(ctx->Array.ArrayBufferObj)) {
   _mesa_error(ctx, GL_INVALID_OPERATION, "%s(non-VBO array)", func);
   return;
}
 
-   if (!update_array_format(ctx, func, ctx->Array.VAO, attrib,
+   if (!update_array_format(ctx, func, vao, attrib,
 legalTypesMask, sizeMin, sizeMax,
 size, type, normalized, integer, doubles, 0)) {
   return;
}
 
/* Reset the vertex attrib binding */
-   vertex_attrib_binding(ctx, ctx->Array.VAO, attrib, attrib);
+   vertex_attrib_binding(ctx, vao, attrib, attrib);
 
/* The Stride and Ptr fields are not set by update_array_format() */
-   array = >Array.VAO->VertexAttrib[attrib];
+   array = >VertexAttrib[attrib];
array->Stride = stride;
array->Ptr = (const GLvoid *) ptr;
 
/* Update the vertex buffer binding */
effectiveStride = stride != 0 ? stride : array->_ElementSize;
-   _mesa_bind_vertex_buffer(ctx, ctx->Array.VAO, attrib,
+   _mesa_bind_vertex_buffer(ctx, vao, attrib,
 ctx->Array.ArrayBufferObj, (GLintptr) ptr,
 effectiveStride);
 }

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


Mesa (master): vc4: Avoid loading from the texture during non-utile-aligned glTexImage().

2016-10-13 Thread Eric Anholt
Module: Mesa
Branch: master
Commit: 99d790538de2e7d7d489a8638b13c5aa069c27c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=99d790538de2e7d7d489a8638b13c5aa069c27c3

Author: Eric Anholt 
Date:   Thu Oct 13 12:37:59 2016 -0700

vc4: Avoid loading from the texture during non-utile-aligned glTexImage().

Previously, the plan was "if the width/height we have to load/store isn't
the size the user is planning on writing, then we need to load the old
contents out beforehand to prevent writing back undefined".

However, when we're doing glTexImage() we often end up aligning the
width/height into the padding of the texture, and we don't actually
need to read out that padding.

Improves x11perf -aatrapezoid100 performance from ~460/sec to
~700/sec.

---

 src/gallium/drivers/vc4/vc4_resource.c | 46 +-
 1 file changed, 34 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/vc4/vc4_resource.c 
b/src/gallium/drivers/vc4/vc4_resource.c
index 4168079..704cd71 100644
--- a/src/gallium/drivers/vc4/vc4_resource.c
+++ b/src/gallium/drivers/vc4/vc4_resource.c
@@ -284,26 +284,48 @@ vc4_resource_transfer_map(struct pipe_context *pctx,
 return NULL;
 
 /* We need to align the box to utile boundaries, since that's
- * what load/store operate on.
+ * what load/store operates on.  This may cause us to need to
+ * read out the original contents in that border area.  Right
+ * now we just read out the entire contents, including the
+ * middle area that will just get overwritten.
  */
-uint32_t orig_width = ptrans->box.width;
-uint32_t orig_height = ptrans->box.height;
 uint32_t box_start_x = ptrans->box.x & (utile_w - 1);
 uint32_t box_start_y = ptrans->box.y & (utile_h - 1);
-ptrans->box.width += box_start_x;
-ptrans->box.x -= box_start_x;
-ptrans->box.height += box_start_y;
-ptrans->box.y -= box_start_y;
-ptrans->box.width = align(ptrans->box.width, utile_w);
-ptrans->box.height = align(ptrans->box.height, utile_h);
+bool needs_load = (usage & PIPE_TRANSFER_READ) != 0;
+
+if (box_start_x) {
+ptrans->box.width += box_start_x;
+ptrans->box.x -= box_start_x;
+needs_load = true;
+}
+if (box_start_y) {
+ptrans->box.height += box_start_y;
+ptrans->box.y -= box_start_y;
+needs_load = true;
+}
+if (ptrans->box.width & (utile_w - 1)) {
+/* We only need to force a load if our border region
+ * we're extending into is actually part of the
+ * texture.
+ */
+uint32_t slice_width = u_minify(prsc->width0, level);
+if (ptrans->box.x + ptrans->box.width != slice_width)
+needs_load = true;
+ptrans->box.width = align(ptrans->box.width, utile_w);
+}
+if (ptrans->box.height & (utile_h - 1)) {
+uint32_t slice_height = u_minify(prsc->height0, level);
+if (ptrans->box.y + ptrans->box.height != slice_height)
+needs_load = true;
+ptrans->box.height = align(ptrans->box.height, 
utile_h);
+}
 
 ptrans->stride = ptrans->box.width * rsc->cpp;
 ptrans->layer_stride = ptrans->stride * ptrans->box.height;
 
 trans->map = malloc(ptrans->layer_stride * ptrans->box.depth);
-if (usage & PIPE_TRANSFER_READ ||
-ptrans->box.width != orig_width ||
-ptrans->box.height != orig_height) {
+
+if (needs_load) {
 vc4_load_tiled_image(trans->map, ptrans->stride,
  buf + slice->offset +
  ptrans->box.z * 
rsc->cube_map_stride,

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


Mesa (master): st/nine: Fix possible segfault in surface ctor

2016-10-13 Thread Axel Davy
Module: Mesa
Branch: master
Commit: 0717cd975d85eb04389d84c54b796863aa537cf0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0717cd975d85eb04389d84c54b796863aa537cf0

Author: Axel Davy 
Date:   Wed Oct 12 19:10:53 2016 +0200

st/nine: Fix possible segfault in surface ctor

Regression introduced by
ba0274c7d6c3b77a36bbe1b444f427b0c873e2f3

Check the resource exists before assigning it
a flag (and use This->base.resource instead
of pResource, since the former may have a newly
allocate resource, while the latter would be
NULL).

This should reintroduce the behaviour of previous
code.

Signed-off-by: Axel Davy 

---

 src/gallium/state_trackers/nine/surface9.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/surface9.c 
b/src/gallium/state_trackers/nine/surface9.c
index dc31bb9..664b78f 100644
--- a/src/gallium/state_trackers/nine/surface9.c
+++ b/src/gallium/state_trackers/nine/surface9.c
@@ -187,8 +187,8 @@ NineSurface9_ctor( struct NineSurface9 *This,
 
 This->stride = nine_format_get_stride(This->base.info.format, 
pDesc->Width);
 
-if (pDesc->Usage & D3DUSAGE_DYNAMIC)
-pResource->flags |= NINE_RESOURCE_FLAG_LOCKABLE;
+if (This->base.resource && (pDesc->Usage & D3DUSAGE_DYNAMIC))
+This->base.resource->flags |= NINE_RESOURCE_FLAG_LOCKABLE;
 
 /* TODO: investigate what else exactly needs to be cleared */
 if (This->base.resource && (pDesc->Usage & D3DUSAGE_RENDERTARGET)) {

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


Mesa (master): st/nine: Remove useless code in nine_shader

2016-10-13 Thread Axel Davy
Module: Mesa
Branch: master
Commit: 98b8ad61c6bc531646bec1e773b0f57f99e47159
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=98b8ad61c6bc531646bec1e773b0f57f99e47159

Author: Axel Davy 
Date:   Wed Oct 12 18:58:24 2016 +0200

st/nine: Remove useless code in nine_shader

Since 1604efa6fda9b780e8537a131ad77f3e83e5a67a,
lconsti and lconstb don't need to be initialized.

Remove some leftovers from the previous code (which
has now invalid use of ARRAY_SIZE on a pointer instead
of an array).

Reported by Coverity.

Signed-off-by: Axel Davy 

---

 src/gallium/state_trackers/nine/nine_shader.c | 5 -
 1 file changed, 5 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_shader.c 
b/src/gallium/state_trackers/nine/nine_shader.c
index 0f8bcdd..ab21daf 100644
--- a/src/gallium/state_trackers/nine/nine_shader.c
+++ b/src/gallium/state_trackers/nine/nine_shader.c
@@ -3361,11 +3361,6 @@ tx_ctor(struct shader_translator *tx, struct 
nine_shader_info *info)
 for (i = 0; i < ARRAY_SIZE(tx->regs.vT); ++i)
 tx->regs.vT[i] = ureg_src_undef();
 
-for (i = 0; i < ARRAY_SIZE(tx->lconsti); ++i)
-tx->lconsti[i].idx = -1;
-for (i = 0; i < ARRAY_SIZE(tx->lconstb); ++i)
-tx->lconstb[i].idx = -1;
-
 sm1_read_version(tx);
 
 info->version = (tx->version.major << 4) | tx->version.minor;

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


Mesa (master): gallium/os: Use unsigned integers for size computation

2016-10-13 Thread Axel Davy
Module: Mesa
Branch: master
Commit: 197cdd1bbdafaf44dc705e518987a08953b092ab
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=197cdd1bbdafaf44dc705e518987a08953b092ab

Author: Axel Davy 
Date:   Tue Oct 11 18:57:17 2016 +0200

gallium/os: Use unsigned integers for size computation

Use uint64_t instead of int64_t in the calculation,
as the result is uint64_t.

Signed-off-by: Axel Davy 
Reviewed-by: Nicolai Hähnle 

---

 src/gallium/auxiliary/os/os_misc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/os/os_misc.c 
b/src/gallium/auxiliary/os/os_misc.c
index a32a9e5..09d4400 100644
--- a/src/gallium/auxiliary/os/os_misc.c
+++ b/src/gallium/auxiliary/os/os_misc.c
@@ -131,7 +131,7 @@ os_get_total_physical_memory(uint64_t *size)
if (phys_pages <= 0 || page_size <= 0)
   return false;
 
-   *size = (int64_t)phys_pages * (int64_t)page_size;
+   *size = (uint64_t)phys_pages * (uint64_t)page_size;
return true;
 #elif defined(PIPE_OS_APPLE) || defined(PIPE_OS_BSD)
size_t len = sizeof(*size);
@@ -159,7 +159,7 @@ os_get_total_physical_memory(uint64_t *size)
if (ret != B_OK || info.max_pages <= 0)
   return false;
 
-   *size = (int64_t)info.max_pages * (int64_t)B_PAGE_SIZE;
+   *size = (uint64_t)info.max_pages * (uint64_t)B_PAGE_SIZE;
return true;
 #elif defined(PIPE_OS_WINDOWS)
MEMORYSTATUSEX status;

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


Mesa (master): nvc0: enable ARB_enhanced_layouts

2016-10-13 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 452722216954c95f0a8ca1f2a610185ae0bd2a63
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=452722216954c95f0a8ca1f2a610185ae0bd2a63

Author: Samuel Pitoiset 
Date:   Sun Oct  9 13:48:31 2016 +0200

nvc0: enable ARB_enhanced_layouts

All ARB_enhanced_layouts piglit tests pass without any changes
in our compiler.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Ilia Mirkin 

---

 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index 1011054..cfa2f76 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -240,6 +240,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
case PIPE_CAP_TGSI_VOTE:
case PIPE_CAP_POLYGON_OFFSET_UNITS_UNSCALED:
+   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
   return 1;
case PIPE_CAP_COMPUTE:
   return (class_3d < GP100_3D_CLASS);
@@ -272,7 +273,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_PCI_DEVICE:
case PIPE_CAP_PCI_FUNCTION:
case PIPE_CAP_VIEWPORT_SUBPIXEL_BITS:
-   case PIPE_CAP_TGSI_ARRAY_COMPONENTS:
   return 0;
 
case PIPE_CAP_VENDOR_ID:

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


Mesa (master): radv: fix the wayland wsi busy bit

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 47a7d86fe907932c40484ccdeefeac269bbb0810
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=47a7d86fe907932c40484ccdeefeac269bbb0810

Author: Dave Airlie 
Date:   Fri Oct 14 05:09:39 2016 +1000

radv: fix the wayland wsi busy bit

Signed-off-by: Dave Airlie 

---

 src/amd/vulkan/radv_wsi_wayland.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_wsi_wayland.c 
b/src/amd/vulkan/radv_wsi_wayland.c
index 5ce2e9e..739e0e3 100644
--- a/src/amd/vulkan/radv_wsi_wayland.c
+++ b/src/amd/vulkan/radv_wsi_wayland.c
@@ -521,7 +521,7 @@ wsi_wl_swapchain_acquire_next_image(struct radv_swapchain 
*radv_chain,
if (!chain->images[i].busy) {
/* We found a non-busy image */
*image_index = i;
-   chain->images[image_index].busy = true;
+   chain->images[i].busy = true;
return VK_SUCCESS;
}
}

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


Mesa (master): anv: fix the wayland wsi busy flag setting

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: a3834ebaf9ea8ff6826651392978cdb73b7fab96
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3834ebaf9ea8ff6826651392978cdb73b7fab96

Author: Dave Airlie 
Date:   Fri Oct 14 05:08:56 2016 +1000

anv: fix the wayland wsi busy flag setting

Cc: "12.0" 
Signed-off-by: Dave Airlie 

---

 src/intel/vulkan/anv_wsi_wayland.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/intel/vulkan/anv_wsi_wayland.c 
b/src/intel/vulkan/anv_wsi_wayland.c
index e6cc09f..71527d3 100644
--- a/src/intel/vulkan/anv_wsi_wayland.c
+++ b/src/intel/vulkan/anv_wsi_wayland.c
@@ -523,7 +523,7 @@ wsi_wl_swapchain_acquire_next_image(struct anv_swapchain 
*anv_chain,
  if (!chain->images[i].busy) {
 /* We found a non-busy image */
 *image_index = i;
-chain->images[image_index].busy = true;
+chain->images[i].busy = true;
 return VK_SUCCESS;
  }
   }

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


Mesa (master): radv: Use new image load/store intrinsic signatures v2

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 5c66d46d6ace0603227e4b919b132416444949e7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c66d46d6ace0603227e4b919b132416444949e7

Author: Tom Stellard 
Date:   Thu Oct 13 17:25:58 2016 +

radv: Use new image load/store intrinsic signatures v2

These were changed in LLVM r284024.

v2:
  - Only use float types for vdata of llvm.amdgcn.image.store.  LLVM doesn't
support integer types for this intrinsic.

Signed-off-by: Dave Airlie 

---

 src/amd/common/ac_nir_to_llvm.c | 133 
 1 file changed, 108 insertions(+), 25 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 9c764c7..56814ec 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2296,13 +2296,73 @@ static LLVMValueRef get_image_coords(struct 
nir_to_llvm_context *ctx,
return res;
 }
 
+static void build_type_name_for_intr(
+LLVMTypeRef type,
+char *buf, unsigned bufsize)
+{
+LLVMTypeRef elem_type = type;
+
+assert(bufsize >= 8);
+
+if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
+int ret = snprintf(buf, bufsize, "v%u",
+LLVMGetVectorSize(type));
+if (ret < 0) {
+char *type_name = LLVMPrintTypeToString(type);
+fprintf(stderr, "Error building type name for: %s\n",
+type_name);
+return;
+}
+elem_type = LLVMGetElementType(type);
+buf += ret;
+bufsize -= ret;
+}
+switch (LLVMGetTypeKind(elem_type)) {
+default: break;
+case LLVMIntegerTypeKind:
+snprintf(buf, bufsize, "i%d", LLVMGetIntTypeWidth(elem_type));
+break;
+case LLVMFloatTypeKind:
+snprintf(buf, bufsize, "f32");
+break;
+case LLVMDoubleTypeKind:
+snprintf(buf, bufsize, "f64");
+break;
+}
+}
+
+static void get_image_intr_name(const char *base_name,
+LLVMTypeRef data_type,
+LLVMTypeRef coords_type,
+LLVMTypeRef rsrc_type,
+char *out_name, unsigned out_len)
+{
+char coords_type_name[8];
+
+build_type_name_for_intr(coords_type, coords_type_name,
+sizeof(coords_type_name));
+
+if (HAVE_LLVM <= 0x0309) {
+snprintf(out_name, out_len, "%s.%s", base_name, 
coords_type_name);
+} else {
+char data_type_name[8];
+char rsrc_type_name[8];
+
+build_type_name_for_intr(data_type, data_type_name,
+sizeof(data_type_name));
+build_type_name_for_intr(rsrc_type, rsrc_type_name,
+sizeof(rsrc_type_name));
+snprintf(out_name, out_len, "%s.%s.%s.%s", base_name,
+ data_type_name, coords_type_name, rsrc_type_name);
+}
+}
+
 static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
 nir_intrinsic_instr *instr)
 {
LLVMValueRef params[7];
LLVMValueRef res;
-   char intrinsic_name[32];
-   char coords_type[8];
+   char intrinsic_name[64];
const nir_variable *var = instr->variables[0]->var;
const struct glsl_type *type = var->type;
if(instr->variables[0]->deref.child)
@@ -2322,23 +2382,35 @@ static LLVMValueRef visit_image_load(struct 
nir_to_llvm_context *ctx,
res = trim_vector(ctx, res, instr->dest.ssa.num_components);
res = to_integer(ctx, res);
} else {
-   bool da = glsl_sampler_type_is_array(type) ||
- glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
+   bool is_da = glsl_sampler_type_is_array(type) ||
+glsl_get_sampler_dim(type) == 
GLSL_SAMPLER_DIM_CUBE;
bool add_frag_pos = glsl_get_sampler_dim(type) == 
GLSL_SAMPLER_DIM_SUBPASS;
+   LLVMValueRef da = is_da ? ctx->i32one : ctx->i32zero;
+   LLVMValueRef glc = LLVMConstInt(ctx->i1, 0, false);
+   LLVMValueRef slc = LLVMConstInt(ctx->i1, 0, false);
 
params[0] = get_image_coords(ctx, instr, add_frag_pos);
params[1] = get_sampler_desc(ctx, instr->variables[0], 
DESC_IMAGE);
params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
-   params[3] = LLVMConstInt(ctx->i1, 0, false);  /* r128 */
-   params[4] = da ? ctx->i32one : ctx->i32zero; /* da */
-   params[5] = LLVMConstInt(ctx->i1, 0, 

Mesa (master): radv: Fix incorrect comment

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 30e63fb0e48cefb44dc4c28e0f282bdbb34c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=30e63fb0e48cefb44dc4c28e0f282bdbb34c

Author: Tom Stellard 
Date:   Thu Oct 13 15:21:27 2016 +

radv: Fix incorrect comment

Signed-off-by: Dave Airlie 

---

 src/amd/common/ac_nir_to_llvm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index e6ff7c8..9c764c7 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2373,8 +2373,8 @@ static void visit_image_store(struct nir_to_llvm_context 
*ctx,
bool da = glsl_sampler_type_is_array(type) ||
  glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
 
-   params[0] = get_src(ctx, instr->src[2]); /* coords */
-   params[1] = get_image_coords(ctx, instr, false);
+   params[0] = get_src(ctx, instr->src[2]);
+   params[1] = get_image_coords(ctx, instr, false); /* coords */
params[2] = get_sampler_desc(ctx, instr->variables[0], 
DESC_IMAGE);
params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
params[4] = i1false;  /* r128 */

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


Mesa (master): radv: fix identity swizzle handling

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 060e6f468a35bcf3fbc425b489ef1f39be808e81
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=060e6f468a35bcf3fbc425b489ef1f39be808e81

Author: Dave Airlie 
Date:   Tue Oct 11 16:46:25 2016 +1000

radv: fix identity swizzle handling

The identity swizzle should operate exactly
like an .r = R, .g = G, .b = B, .a = A swizzle.

This fixes a bunch of the 16-bit BGRA blit tests
dEQP-VK.api.copy_and_blit.blit_image.all_formats.b4g4r4a4*

Signed-off-by: Dave Airlie 

---

 src/amd/vulkan/vk_format.h | 18 ++
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/amd/vulkan/vk_format.h b/src/amd/vulkan/vk_format.h
index 7b78373..58ee3f7 100644
--- a/src/amd/vulkan/vk_format.h
+++ b/src/amd/vulkan/vk_format.h
@@ -32,6 +32,7 @@ extern "C" {
 
 #include 
 #include 
+#include 
 enum vk_format_layout {
/**
 * Formats with vk_format_block::width == vk_format_block::height == 1
@@ -257,12 +258,13 @@ vk_format_aspects(VkFormat format)
 }
 
 static inline enum vk_swizzle
-radv_swizzle_conv(int idx, const unsigned char chan[4], VkComponentSwizzle 
vk_swiz)
+radv_swizzle_conv(VkComponentSwizzle component, const unsigned char chan[4], 
VkComponentSwizzle vk_swiz)
 {
int x;
+
+   if (vk_swiz == VK_COMPONENT_SWIZZLE_IDENTITY)
+   vk_swiz = component;
switch (vk_swiz) {
-   case VK_COMPONENT_SWIZZLE_IDENTITY:
-   return chan[idx];
case VK_COMPONENT_SWIZZLE_ZERO:
return VK_SWIZZLE_0;
case VK_COMPONENT_SWIZZLE_ONE:
@@ -288,7 +290,7 @@ radv_swizzle_conv(int idx, const unsigned char chan[4], 
VkComponentSwizzle vk_sw
return x;
return VK_SWIZZLE_1;
default:
-   return chan[idx];
+   unreachable("Illegal swizzle");
}
 }
 
@@ -296,10 +298,10 @@ static inline void vk_format_compose_swizzles(const 
VkComponentMapping *mapping,
  const unsigned char swz[4],
  enum vk_swizzle dst[4])
 {
-   dst[0] = radv_swizzle_conv(0, swz, mapping->r);
-   dst[1] = radv_swizzle_conv(1, swz, mapping->g);
-   dst[2] = radv_swizzle_conv(2, swz, mapping->b);
-   dst[3] = radv_swizzle_conv(3, swz, mapping->a);
+   dst[0] = radv_swizzle_conv(VK_COMPONENT_SWIZZLE_R, swz, mapping->r);
+   dst[1] = radv_swizzle_conv(VK_COMPONENT_SWIZZLE_G, swz, mapping->g);
+   dst[2] = radv_swizzle_conv(VK_COMPONENT_SWIZZLE_B, swz, mapping->b);
+   dst[3] = radv_swizzle_conv(VK_COMPONENT_SWIZZLE_A, swz, mapping->a);
 }
 
 static inline bool

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


Mesa (master): anv/wsi: fix apps that acquire multiple images up front

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 8980ac041167fb5a80be76e2f912b96117afa2cf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8980ac041167fb5a80be76e2f912b96117afa2cf

Author: Dave Airlie 
Date:   Thu Oct 13 12:43:07 2016 +1000

anv/wsi: fix apps that acquire multiple images up front

This fix was found in the radv codebase when running dota2,
no idea if anyone has reported it on anv, but the same problem
occurs.

Once an image is acquired we need to mark it busy.

Acked-by: Edward O'Callaghan 
Cc: "12.0" 
Signed-off-by: Dave Airlie 

---

 src/intel/vulkan/anv_wsi_wayland.c | 1 +
 src/intel/vulkan/anv_wsi_x11.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/intel/vulkan/anv_wsi_wayland.c 
b/src/intel/vulkan/anv_wsi_wayland.c
index afce96f..e6cc09f 100644
--- a/src/intel/vulkan/anv_wsi_wayland.c
+++ b/src/intel/vulkan/anv_wsi_wayland.c
@@ -523,6 +523,7 @@ wsi_wl_swapchain_acquire_next_image(struct anv_swapchain 
*anv_chain,
  if (!chain->images[i].busy) {
 /* We found a non-busy image */
 *image_index = i;
+chain->images[image_index].busy = true;
 return VK_SUCCESS;
  }
   }
diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c
index 010c86c..5748506 100644
--- a/src/intel/vulkan/anv_wsi_x11.c
+++ b/src/intel/vulkan/anv_wsi_x11.c
@@ -574,6 +574,7 @@ x11_acquire_next_image(struct anv_swapchain *anv_chain,
 /* We found a non-busy image */
 xshmfence_await(chain->images[i].shm_fence);
 *image_index = i;
+chain->images[i].busy = true;
 return VK_SUCCESS;
  }
   }

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


Mesa (master): radv/wsi: fix app that acquire multiple images up front

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 8bdac874e667179bd2682f0111cd7db58b858e5b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bdac874e667179bd2682f0111cd7db58b858e5b

Author: Dave Airlie 
Date:   Thu Oct 13 12:38:49 2016 +1000

radv/wsi: fix app that acquire multiple images up front

dota2 does multiple acquires followed by multiple queues,
this bug manifested itself as a hang in the xshmfence code
randomly when dota2 was doing it's menus. It also occured
when running dota2 under phoronix-test-suite.

The fix is once the image is acquired to mark it busy then
so nobody else can acquire. We have to trust vulkan apps
that they will eventually submit it.

Acked-by: Edward O'Callaghan 
Signed-off-by: Dave Airlie 

---

 src/amd/vulkan/radv_wsi_wayland.c | 1 +
 src/amd/vulkan/radv_wsi_x11.c | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/amd/vulkan/radv_wsi_wayland.c 
b/src/amd/vulkan/radv_wsi_wayland.c
index 2b4a3d3..5ce2e9e 100644
--- a/src/amd/vulkan/radv_wsi_wayland.c
+++ b/src/amd/vulkan/radv_wsi_wayland.c
@@ -521,6 +521,7 @@ wsi_wl_swapchain_acquire_next_image(struct radv_swapchain 
*radv_chain,
if (!chain->images[i].busy) {
/* We found a non-busy image */
*image_index = i;
+   chain->images[image_index].busy = true;
return VK_SUCCESS;
}
}
diff --git a/src/amd/vulkan/radv_wsi_x11.c b/src/amd/vulkan/radv_wsi_x11.c
index 0aae2a3..9cd0db0 100644
--- a/src/amd/vulkan/radv_wsi_x11.c
+++ b/src/amd/vulkan/radv_wsi_x11.c
@@ -579,6 +579,7 @@ x11_acquire_next_image(struct radv_swapchain *radv_chain,
/* We found a non-busy image */
xshmfence_await(chain->images[i].shm_fence);
*image_index = i;
+   chain->images[i].busy = true;
return VK_SUCCESS;
}
}

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


Mesa (master): anv: initialise and increment send_sbc

2016-10-13 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: dfe74fd1a9e16647e0f2673d3676264f2a588a95
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dfe74fd1a9e16647e0f2673d3676264f2a588a95

Author: Dave Airlie 
Date:   Tue Aug 30 09:46:29 2016 +1000

anv: initialise and increment send_sbc

At least set this to not be uninitialised memory.

Cc: "12.0" 
Signed-off-by: Dave Airlie 

---

 src/intel/vulkan/anv_wsi_x11.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/intel/vulkan/anv_wsi_x11.c b/src/intel/vulkan/anv_wsi_x11.c
index 25c585f..010c86c 100644
--- a/src/intel/vulkan/anv_wsi_x11.c
+++ b/src/intel/vulkan/anv_wsi_x11.c
@@ -611,6 +611,7 @@ x11_queue_present(struct anv_swapchain *anv_chain,
 
xshmfence_reset(image->shm_fence);
 
+   ++chain->send_sbc;
xcb_void_cookie_t cookie =
   xcb_present_pixmap(chain->conn,
  chain->window,
@@ -843,6 +844,7 @@ x11_surface_create_swapchain(VkIcdSurfaceBase *icd_surface,
chain->window = x11_surface_get_window(icd_surface);
chain->extent = pCreateInfo->imageExtent;
chain->image_count = num_images;
+   chain->send_sbc = 0;
 
chain->event_id = xcb_generate_id(chain->conn);
xcb_present_select_input(chain->conn, chain->event_id, chain->window,

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


Mesa (master): radeonsi: disable ReZ

2016-10-13 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: e12c1cab5d571c215f65bd9f3fc1629c090ed948
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e12c1cab5d571c215f65bd9f3fc1629c090ed948

Author: Marek Olšák 
Date:   Wed Oct 12 21:47:41 2016 +0200

radeonsi: disable ReZ

This is a serious performance fix. Discovered by luck.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94354

Cc: 12.0 
Reviewed-by: Nicolai Hähnle 

---

 src/gallium/drivers/radeonsi/si_state_shaders.c | 11 ---
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index c41c519..be5c659 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -808,10 +808,10 @@ static void si_shader_ps(struct si_shader *shader)
   S_00B02C_USER_SGPR(SI_PS_NUM_USER_SGPR) |
   
S_00B32C_SCRATCH_EN(shader->config.scratch_bytes_per_wave > 0));
 
-   /* Prefer RE_Z if the shader is complex enough. The requirement is 
either:
-* - the shader uses at least 2 VMEM instructions, or
-* - the code size is at least 50 2-dword instructions or 100 1-dword
-*   instructions.
+   /* DON'T USE EARLY_Z_THEN_RE_Z !!!
+*
+* It decreases performance by 15% in DiRT: Showdown on Ultra settings.
+* And it has pretty complex shaders.
 *
 * Shaders with side effects that must execute independently of the
 * depth test require LATE_Z.
@@ -819,9 +819,6 @@ static void si_shader_ps(struct si_shader *shader)
if (info->writes_memory &&
!info->properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL])
shader->z_order = V_02880C_LATE_Z;
-   else if (info->num_memory_instructions >= 2 ||
-shader->binary.code_size > 100*4)
-   shader->z_order = V_02880C_EARLY_Z_THEN_RE_Z;
else
shader->z_order = V_02880C_EARLY_Z_THEN_LATE_Z;
 }

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


Mesa (master): radeonsi: adjust and clean up Z_ORDER and EXEC_ON_x settings

2016-10-13 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 7dddf0b7ab9a222a79b647082ebfb8787c8559ac
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7dddf0b7ab9a222a79b647082ebfb8787c8559ac

Author: Marek Olšák 
Date:   Wed Oct 12 22:15:31 2016 +0200

radeonsi: adjust and clean up Z_ORDER and EXEC_ON_x settings

The table was copied from the Vulkan driver. The comment lines are as long
as the table for cosmetic reasons.

Reviewed-by: Nicolai Hähnle 

---

 src/gallium/drivers/radeonsi/si_shader.h|  1 -
 src/gallium/drivers/radeonsi/si_state_shaders.c | 53 +++--
 2 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.h 
b/src/gallium/drivers/radeonsi/si_shader.h
index f2618ac..b07210c 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -439,7 +439,6 @@ struct si_shader {
struct r600_resource*scratch_bo;
union si_shader_key key;
boolis_binary_shared;
-   unsignedz_order;
 
/* The following data is all that's needed for binary shaders. */
struct radeon_shader_binary binary;
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index be5c659..d339b84 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -807,20 +807,6 @@ static void si_shader_ps(struct si_shader *shader)
   S_00B02C_EXTRA_LDS_SIZE(shader->config.lds_size) |
   S_00B02C_USER_SGPR(SI_PS_NUM_USER_SGPR) |
   
S_00B32C_SCRATCH_EN(shader->config.scratch_bytes_per_wave > 0));
-
-   /* DON'T USE EARLY_Z_THEN_RE_Z !!!
-*
-* It decreases performance by 15% in DiRT: Showdown on Ultra settings.
-* And it has pretty complex shaders.
-*
-* Shaders with side effects that must execute independently of the
-* depth test require LATE_Z.
-*/
-   if (info->writes_memory &&
-   !info->properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL])
-   shader->z_order = V_02880C_LATE_Z;
-   else
-   shader->z_order = V_02880C_EARLY_Z_THEN_LATE_Z;
 }
 
 static void si_shader_init_pm4_state(struct si_screen *sscreen,
@@ -1371,12 +1357,38 @@ static void *si_create_shader_selector(struct 
pipe_context *ctx,
break;
}
 
-   if (sel->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL])
-   sel->db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1);
+   /* Z_ORDER, EXEC_ON_HIER_FAIL and EXEC_ON_NOOP should be set as 
following:
+*
+*   | early Z/S | writes_mem | allow_ReZ? |  Z_ORDER   | 
EXEC_ON_HIER_FAIL | EXEC_ON_NOOP
+* 
--|---||||---|-
+* 1a|   false   |   false|   true | EarlyZ_Then_ReZ|   
  0 | 0
+* 1b|   false   |   false|   false| EarlyZ_Then_LateZ  |   
  0 | 0
+* 2 |   false   |   true |   n/a  |   LateZ|   
  1 | 0
+* 3 |   true|   false|   n/a  | EarlyZ_Then_LateZ  |   
  0 | 0
+* 4 |   true|   true |   n/a  | EarlyZ_Then_LateZ  |   
  0 | 1
+*
+* In cases 3 and 4, HW will force Z_ORDER to EarlyZ regardless of 
what's set in the register.
+* In case 2, NOOP_CULL is a don't care field. In case 2, 3 and 4, ReZ 
doesn't make sense.
+*
+* Don't use ReZ without profiling !!!
+*
+* ReZ decreases performance by 15% in DiRT: Showdown on Ultra 
settings, which has pretty complex
+* shaders.
+*/
+   if (sel->info.properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL]) {
+   /* Cases 3, 4. */
+   sel->db_shader_control |= S_02880C_DEPTH_BEFORE_SHADER(1) |
+ 
S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z) |
+ 
S_02880C_EXEC_ON_NOOP(sel->info.writes_memory);
+   } else if (sel->info.writes_memory) {
+   /* Case 2. */
+   sel->db_shader_control |= S_02880C_Z_ORDER(V_02880C_LATE_Z) |
+ S_02880C_EXEC_ON_HIER_FAIL(1);
+   } else {
+   /* Case 1. */
+   sel->db_shader_control |= 
S_02880C_Z_ORDER(V_02880C_EARLY_Z_THEN_LATE_Z);
+   }
 
-   if (sel->info.writes_memory)
-   sel->db_shader_control |= S_02880C_EXEC_ON_HIER_FAIL(1) |
- S_02880C_EXEC_ON_NOOP(1);
pipe_mutex_init(sel->mutex);
util_queue_fence_init(>ready);
 
@@ -2213,8 +2225,7 @@ bool 

Mesa (master): gallium: add PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY

2016-10-13 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: a077185ea9d685967844b68aa09da6bd8aa430da
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a077185ea9d685967844b68aa09da6bd8aa430da

Author: Marek Olšák 
Date:   Wed Oct 12 03:06:08 2016 +0200

gallium: add PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY

For performance tuning in drivers. It filters out window system
framebuffers and OpenGL renderbuffers.

radeonsi will use this to guess whether a depth buffer will be read
by a shader. There is no guarantee about what will actually happen.

This is a departure from PIPE_BIND flags which are defined to be strict
but they are useless in practice.

Acked-by: Roland Scheidegger 
Reviewed-by: Nicolai Hähnle 

---

 src/gallium/include/pipe/p_defines.h | 1 +
 src/mesa/state_tracker/st_texture.c  | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gallium/include/pipe/p_defines.h 
b/src/gallium/include/pipe/p_defines.h
index cdad415..746a822 100644
--- a/src/gallium/include/pipe/p_defines.h
+++ b/src/gallium/include/pipe/p_defines.h
@@ -450,6 +450,7 @@ enum pipe_flush_flags
  */
 #define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0)
 #define PIPE_RESOURCE_FLAG_MAP_COHERENT   (1 << 1)
+#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2)
 #define PIPE_RESOURCE_FLAG_DRV_PRIV(1 << 16) /* driver/winsys private */
 #define PIPE_RESOURCE_FLAG_ST_PRIV (1 << 24) /* state-tracker/winsys 
private */
 
diff --git a/src/mesa/state_tracker/st_texture.c 
b/src/mesa/state_tracker/st_texture.c
index a2c36ac..7b72ffd 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -91,7 +91,8 @@ st_texture_create(struct st_context *st,
pt.array_size = layers;
pt.usage = PIPE_USAGE_DEFAULT;
pt.bind = bind;
-   pt.flags = 0;
+   /* only set this for OpenGL textures, not renderbuffers */
+   pt.flags = PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY;
pt.nr_samples = nr_samples;
 
newtex = screen->resource_create(screen, );

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


Mesa (master): radeonsi: implement TC-compatible HTILE

2016-10-13 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: d4d9ec55c589156df4edc227a86b4a8c41048d58
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d4d9ec55c589156df4edc227a86b4a8c41048d58

Author: Marek Olšák 
Date:   Tue Oct 11 23:19:46 2016 +0200

radeonsi: implement TC-compatible HTILE

so that decompress blits aren't needed and depth texturing needs less
memory bandwidth.

Z16 and Z24 are promoted to Z32_FLOAT by the driver, because TC-compatible
HTILE only supports Z32_FLOAT. This doubles memory footprint for Z16.
The format promotion is not visible to state trackers.

This is part of TC-compatible renderbuffer compression, which has 3 parts:
DCC, HTILE, FMASK. Only TC-compatible FMASK compression is missing now.

I don't see a measurable increase in performance though.

(I tested Talos Principle and DiRT: Showdown, the latter is improved by
 0.5%, which is almost noise, and it originally used layered Z16,
 so at least we know that Z16 promoted to Z32F isn't slower now)

Tested-by: Edmondo Tommasina 
Reviewed-by: Nicolai Hähnle 

---

 src/gallium/drivers/radeon/r600_pipe_common.h  |  3 ++
 src/gallium/drivers/radeon/r600_texture.c  | 67 ++
 src/gallium/drivers/radeon/radeon_winsys.h |  4 ++
 src/gallium/drivers/radeonsi/si_blit.c | 11 -
 src/gallium/drivers/radeonsi/si_descriptors.c  |  7 ++-
 src/gallium/drivers/radeonsi/si_shader.c   | 18 ++-
 src/gallium/drivers/radeonsi/si_state.c| 39 +--
 src/gallium/drivers/radeonsi/si_state_draw.c   |  3 +-
 src/gallium/winsys/amdgpu/drm/amdgpu_surface.c | 57 --
 9 files changed, 185 insertions(+), 24 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_pipe_common.h 
b/src/gallium/drivers/radeon/r600_pipe_common.h
index 290b228..5cfcad6 100644
--- a/src/gallium/drivers/radeon/r600_pipe_common.h
+++ b/src/gallium/drivers/radeon/r600_pipe_common.h
@@ -245,6 +245,7 @@ struct r600_htile_info {
unsigned height;
unsigned xalign;
unsigned yalign;
+   unsigned alignment;
 };
 
 struct r600_texture {
@@ -252,6 +253,7 @@ struct r600_texture {
 
uint64_tsize;
unsignednum_level0_transfers;
+   enum pipe_formatdb_render_format;
boolis_depth;
booldb_compatible;
boolcan_sample_z;
@@ -273,6 +275,7 @@ struct r600_texture {
/* Depth buffer compression and fast clear. */
struct r600_htile_info  htile;
struct r600_resource*htile_buffer;
+   booltc_compatible_htile;
booldepth_cleared; /* if it was cleared at 
least once */
float   depth_clear_value;
boolstencil_cleared; /* if it was cleared 
at least once */
diff --git a/src/gallium/drivers/radeon/r600_texture.c 
b/src/gallium/drivers/radeon/r600_texture.c
index 57cdbcf..625d091 100644
--- a/src/gallium/drivers/radeon/r600_texture.c
+++ b/src/gallium/drivers/radeon/r600_texture.c
@@ -192,7 +192,8 @@ static int r600_init_surface(struct r600_common_screen 
*rscreen,
 struct radeon_surf *surface,
 const struct pipe_resource *ptex,
 unsigned array_mode,
-bool is_flushed_depth)
+bool is_flushed_depth,
+bool tc_compatible_htile)
 {
const struct util_format_description *desc =
util_format_description(ptex->format);
@@ -256,11 +257,22 @@ static int r600_init_surface(struct r600_common_screen 
*rscreen,
if (!is_flushed_depth && is_depth) {
surface->flags |= RADEON_SURF_ZBUFFER;
 
+   if (tc_compatible_htile &&
+   array_mode == RADEON_SURF_MODE_2D) {
+   /* TC-compatible HTILE only supports Z32_FLOAT.
+* Promote Z16 to Z32. DB->CB copies will convert
+* the format for transfers.
+*/
+   surface->bpe = 4;
+   surface->flags |= RADEON_SURF_TC_COMPATIBLE_HTILE;
+   }
+
if (is_stencil) {
surface->flags |= RADEON_SURF_SBUFFER |
  RADEON_SURF_HAS_SBUFFER_MIPTREE;
}
}
+
if (rscreen->chip_class >= SI) {
surface->flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
}
@@ -904,6 +916,7 @@ static unsigned r600_texture_get_htile_size(struct 
r600_common_screen *rscreen,
rtex->htile.height = height;
rtex->htile.xalign = cl_width * 8;
rtex->htile.yalign = cl_height * 8;
+ 

Mesa (master): radeonsi: fix regression in image atomics

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: 761388a0eb586b1dcaec063ee561056ed132dc1a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=761388a0eb586b1dcaec063ee561056ed132dc1a

Author: Nicolai Hähnle 
Date:   Thu Oct 13 16:03:06 2016 +0200

radeonsi: fix regression in image atomics

Caused by a bad rebase when pushing commit 76a940893.

---

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

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 25146e8..fc50205 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -4203,7 +4203,7 @@ static void atomic_emit(
else
coords = emit_data->args[1];
 
-   build_type_name_for_intr(coords, coords_type, 
sizeof(coords_type));
+   build_type_name_for_intr(LLVMTypeOf(coords), coords_type, 
sizeof(coords_type));
snprintf(intrinsic_name, sizeof(intrinsic_name),
 "llvm.amdgcn.image.atomic.%s.%s",
 action->intr_name, coords_type);

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


Mesa (master): st/mesa: fix vertex elements setup for doubles

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: d413fbb159d0ddac16bb9d93bdda4fe598d39e17
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d413fbb159d0ddac16bb9d93bdda4fe598d39e17

Author: Nicolai Hähnle 
Date:   Mon Oct 10 20:20:22 2016 +0200

st/mesa: fix vertex elements setup for doubles

Whether one or two slots are taken up by one API array depends on the
vertex shader, not on how the array is configured. When an array is
set up with fewer components than the shader expects, the high components
are undefined.

Fixes GL45-CTS.vertex_attrib_binding.basic-inputL-case1.

Cc: mesa-sta...@lists.freedesktop.org
Reviewed-by: Dave Airlie 

---

 src/mesa/state_tracker/st_atom_array.c | 98 +-
 1 file changed, 50 insertions(+), 48 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_array.c 
b/src/mesa/state_tracker/st_atom_array.c
index 1c2cfa7..e5b949f 100644
--- a/src/mesa/state_tracker/st_atom_array.c
+++ b/src/mesa/state_tracker/st_atom_array.c
@@ -386,6 +386,7 @@ static void init_velement(struct pipe_vertex_element 
*velement,
 }
 
 static void init_velement_lowered(struct st_context *st,
+  const struct st_vertex_program *vp,
   struct pipe_vertex_element *velements,
   int src_offset, int format,
   int instance_divisor, int vbo_index,
@@ -396,23 +397,33 @@ static void init_velement_lowered(struct st_context *st,
if (doubles) {
   int lower_format;
 
-  if (nr_components == 1)
+  if (nr_components < 2)
  lower_format = PIPE_FORMAT_R32G32_UINT;
-  else if (nr_components >= 2)
+  else
  lower_format = PIPE_FORMAT_R32G32B32A32_UINT;
 
   init_velement([idx], src_offset,
 lower_format, instance_divisor, vbo_index);
   idx++;
 
-  if (nr_components > 2) {
- if (nr_components == 3)
-lower_format = PIPE_FORMAT_R32G32_UINT;
- else if (nr_components >= 4)
-lower_format = PIPE_FORMAT_R32G32B32A32_UINT;
+  if (idx < vp->num_inputs &&
+  vp->index_to_input[idx] == ST_DOUBLE_ATTRIB_PLACEHOLDER) {
+ if (nr_components >= 3) {
+if (nr_components == 3)
+   lower_format = PIPE_FORMAT_R32G32_UINT;
+else
+   lower_format = PIPE_FORMAT_R32G32B32A32_UINT;
+
+init_velement([idx], src_offset + 4 * sizeof(float),
+lower_format, instance_divisor, vbo_index);
+ } else {
+/* The values here are undefined. Fill in some conservative
+ * dummy values.
+ */
+init_velement([idx], src_offset, PIPE_FORMAT_R32G32_UINT,
+  instance_divisor, vbo_index);
+ }
 
- init_velement([idx], src_offset + 4 * sizeof(float),
-   lower_format, instance_divisor, vbo_index);
  idx++;
   }
} else {
@@ -435,10 +446,9 @@ setup_interleaved_attribs(struct st_context *st,
   const struct st_vp_variant *vpv,
   const struct gl_client_array **arrays,
   struct pipe_vertex_buffer *vbuffer,
-  struct pipe_vertex_element velements[],
-  unsigned *num_velements)
+  struct pipe_vertex_element velements[])
 {
-   GLuint attr, attr_idx;
+   GLuint attr;
const GLubyte *low_addr = NULL;
GLboolean usingVBO;  /* all arrays in a VBO? */
struct gl_buffer_object *bufobj;
@@ -481,15 +491,13 @@ setup_interleaved_attribs(struct st_context *st,
/* are the arrays in user space? */
usingVBO = _mesa_is_bufferobj(bufobj);
 
-   attr_idx = 0;
-   for (attr = 0; attr < vpv->num_inputs; attr++) {
+   for (attr = 0; attr < vpv->num_inputs;) {
   const struct gl_client_array *array;
   unsigned src_offset;
   unsigned src_format;
 
   array = get_client_array(vp, arrays, attr);
-  if (!array)
- continue;
+  assert(array);
 
   src_offset = (unsigned) (array->Ptr - low_addr);
   assert(array->_ElementSize ==
@@ -501,13 +509,11 @@ setup_interleaved_attribs(struct st_context *st,
  array->Normalized,
  array->Integer);
 
-  init_velement_lowered(st, velements, src_offset, src_format,
+  init_velement_lowered(st, vp, velements, src_offset, src_format,
 array->InstanceDivisor, 0,
-array->Size, array->Doubles, _idx);
+array->Size, array->Doubles, );
}
 
-   *num_velements = attr_idx;
-
/*
 * Return the vbuffer info and setup user-space attrib info, if needed.
 */
@@ -554,25 +560,25 @@ setup_non_interleaved_attribs(struct st_context *st,

Mesa (master): st/glsl_to_tgsi: remove unnecessary ir_instruction argument from get_opcode

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: 15fc74905b64ab41e47d5b50407596ceaeced638
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=15fc74905b64ab41e47d5b50407596ceaeced638

Author: Nicolai Hähnle 
Date:   Mon Oct 10 11:44:43 2016 +0200

st/glsl_to_tgsi: remove unnecessary ir_instruction argument from get_opcode

Reviewed-by: Ilia Mirkin 
Reviewed-by: Marek Olšák 
Reviewed-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index be0aa2e..fd2485d 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -527,7 +527,7 @@ public:
   st_src_reg src2 = undef_src,
   st_src_reg src3 = undef_src);
 
-   unsigned get_opcode(ir_instruction *ir, unsigned op,
+   unsigned get_opcode(unsigned op,
 st_dst_reg dst,
 st_src_reg src0, st_src_reg src1);
 
@@ -669,7 +669,7 @@ glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir, unsigned 
op,
int num_reladdr = 0, i, j;
bool dst_is_64bit[2];
 
-   op = get_opcode(ir, op, dst, src0, src1);
+   op = get_opcode(op, dst, src0, src1);
 
/* If we have to do relative addressing, we want to load the ARL
 * reg directly for one of the regs, and preload the other reladdr
@@ -900,7 +900,7 @@ glsl_to_tgsi_visitor::emit_asm(ir_instruction *ir, unsigned 
op,
  * based on the operands and input opcode, then emits the result.
  */
 unsigned
-glsl_to_tgsi_visitor::get_opcode(ir_instruction *ir, unsigned op,
+glsl_to_tgsi_visitor::get_opcode(unsigned op,
  st_dst_reg dst,
  st_src_reg src0, st_src_reg src1)
 {

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


Mesa (master): st/glsl_to_tgsi: simplify translate_tex_offset

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: b234e377650c8280d56060ff38c55af9d7772ee4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b234e377650c8280d56060ff38c55af9d7772ee4

Author: Nicolai Hähnle 
Date:   Sun Oct  9 22:28:30 2016 +0200

st/glsl_to_tgsi: simplify translate_tex_offset

This fixes a bug with offsets from uniforms which seems to have only been
noticed as a crash in piglit's
arb_gpu_shader5/compiler/builtin-functions/fs-gatherOffset-uniform-offset.frag
on radeonsi.

Cc: mesa-sta...@lists.freedesktop.org
Reviewed-by: Ilia Mirkin 
Reviewed-by: Marek Olšák 
Reviewed-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 64 +++---
 1 file changed, 14 insertions(+), 50 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index f721506..33c1f87 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -5668,60 +5668,24 @@ translate_src(struct st_translate *t, const st_src_reg 
*src_reg)
 
 static struct tgsi_texture_offset
 translate_tex_offset(struct st_translate *t,
- const st_src_reg *in_offset, int idx)
+ const st_src_reg *in_offset)
 {
struct tgsi_texture_offset offset;
-   struct ureg_src imm_src;
-   struct ureg_dst dst;
-   int array;
+   struct ureg_src src = translate_src(t, in_offset);
 
-   switch (in_offset->file) {
-   case PROGRAM_IMMEDIATE:
-  assert(in_offset->index >= 0 && in_offset->index < t->num_immediates);
-  imm_src = t->immediates[in_offset->index];
-
-  offset.File = imm_src.File;
-  offset.Index = imm_src.Index;
-  offset.SwizzleX = imm_src.SwizzleX;
-  offset.SwizzleY = imm_src.SwizzleY;
-  offset.SwizzleZ = imm_src.SwizzleZ;
-  offset.Padding = 0;
-  break;
-   case PROGRAM_INPUT:
-  imm_src = t->inputs[t->inputMapping[in_offset->index]];
-  offset.File = imm_src.File;
-  offset.Index = imm_src.Index;
-  offset.SwizzleX = GET_SWZ(in_offset->swizzle, 0);
-  offset.SwizzleY = GET_SWZ(in_offset->swizzle, 1);
-  offset.SwizzleZ = GET_SWZ(in_offset->swizzle, 2);
-  offset.Padding = 0;
-  break;
-   case PROGRAM_TEMPORARY:
-  imm_src = ureg_src(t->temps[in_offset->index]);
-  offset.File = imm_src.File;
-  offset.Index = imm_src.Index;
-  offset.SwizzleX = GET_SWZ(in_offset->swizzle, 0);
-  offset.SwizzleY = GET_SWZ(in_offset->swizzle, 1);
-  offset.SwizzleZ = GET_SWZ(in_offset->swizzle, 2);
-  offset.Padding = 0;
-  break;
-   case PROGRAM_ARRAY:
-  array = in_offset->index >> 16;
+   offset.File = src.File;
+   offset.Index = src.Index;
+   offset.SwizzleX = src.SwizzleX;
+   offset.SwizzleY = src.SwizzleY;
+   offset.SwizzleZ = src.SwizzleZ;
+   offset.Padding = 0;
 
-  assert(array >= 0);
-  assert(array < (int)t->num_temp_arrays);
+   assert(!src.Indirect);
+   assert(!src.DimIndirect);
+   assert(!src.Dimension);
+   assert(!src.Absolute); /* those shouldn't be used with integers anyway */
+   assert(!src.Negate);
 
-  dst = t->arrays[array];
-  offset.File = dst.File;
-  offset.Index = dst.Index + (in_offset->index & 0x) - 0x8000;
-  offset.SwizzleX = GET_SWZ(in_offset->swizzle, 0);
-  offset.SwizzleY = GET_SWZ(in_offset->swizzle, 1);
-  offset.SwizzleZ = GET_SWZ(in_offset->swizzle, 2);
-  offset.Padding = 0;
-  break;
-   default:
-  break;
-   }
return offset;
 }
 
@@ -5785,7 +5749,7 @@ compile_tgsi_instruction(struct st_translate *t,
 ureg_src_indirect(src[num_src], ureg_src(t->address[2]));
   num_src++;
   for (i = 0; i < (int)inst->tex_offset_num_offset; i++) {
- texoffsets[i] = translate_tex_offset(t, >tex_offsets[i], i);
+ texoffsets[i] = translate_tex_offset(t, >tex_offsets[i]);
   }
   tex_target = st_translate_texture_target(inst->tex_target, 
inst->tex_shadow);
 

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


Mesa (master): st/glsl_to_tgsi: fix textureGatherOffset with indirectly loaded offsets

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: 1d7685e52ca64f6fcc66b8816b5adb8513b4ae18
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d7685e52ca64f6fcc66b8816b5adb8513b4ae18

Author: Nicolai Hähnle 
Date:   Mon Oct 10 11:44:03 2016 +0200

st/glsl_to_tgsi: fix textureGatherOffset with indirectly loaded offsets

Cc: mesa-sta...@lists.freedesktop.org
Reviewed-by: Ilia Mirkin 
Reviewed-by: Marek Olšák 
Reviewed-by: Dave Airlie 

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 18 +-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp 
b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 33c1f87..be0aa2e 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -560,6 +560,7 @@ public:
   unsigned *index,
   st_src_reg *indirect,
   unsigned *location);
+   st_src_reg canonicalize_gather_offset(st_src_reg offset);
 
bool try_emit_mad(ir_expression *ir,
   int mul_operand);
@@ -3970,6 +3971,20 @@ glsl_to_tgsi_visitor::get_deref_offsets(ir_dereference 
*ir,
}
 }
 
+st_src_reg
+glsl_to_tgsi_visitor::canonicalize_gather_offset(st_src_reg offset)
+{
+   if (offset.reladdr || offset.reladdr2) {
+  st_src_reg tmp = get_temp(glsl_type::ivec2_type);
+  st_dst_reg tmp_dst = st_dst_reg(tmp);
+  tmp_dst.writemask = WRITEMASK_XY;
+  emit_asm(NULL, TGSI_OPCODE_MOV, tmp_dst, offset);
+  return tmp;
+   }
+
+   return offset;
+}
+
 void
 glsl_to_tgsi_visitor::visit(ir_texture *ir)
 {
@@ -4095,9 +4110,10 @@ glsl_to_tgsi_visitor::visit(ir_texture *ir)
offset[i].index += i * type_size(elt_type);
offset[i].type = elt_type->base_type;
offset[i].swizzle = swizzle_for_size(elt_type->vector_elements);
+   offset[i] = canonicalize_gather_offset(offset[i]);
 }
  } else {
-offset[0] = this->result;
+offset[0] = canonicalize_gather_offset(this->result);
  }
   }
   break;

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


Mesa (master): radeonsi: fix the coordinate overloading of llvm.amdgcn.image.atomic.cmpswap.*

2016-10-13 Thread Nicolai Hähnle
Module: Mesa
Branch: master
Commit: 76a940893de634a50b9149a5f3f37c33fbf4f484
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=76a940893de634a50b9149a5f3f37c33fbf4f484

Author: Nicolai Hähnle 
Date:   Mon Oct 10 15:09:40 2016 +0200

radeonsi: fix the coordinate overloading of llvm.amdgcn.image.atomic.cmpswap.*

Fixes GL45-CTS.shader_image_load_store.basic-allTargets-atomic*

Reviewed-by: Dave Airlie 
Reviewed-by: Marek Olšák 

---

 src/gallium/drivers/radeonsi/si_shader.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 8b77fd1..25146e8 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -4195,10 +4195,15 @@ static void atomic_emit(
snprintf(intrinsic_name, sizeof(intrinsic_name),
 "llvm.amdgcn.buffer.atomic.%s", action->intr_name);
} else {
+   LLVMValueRef coords;
char coords_type[8];
 
-   build_type_name_for_intr(LLVMTypeOf(emit_data->args[1]),
-   coords_type, sizeof(coords_type));
+   if (inst->Instruction.Opcode == TGSI_OPCODE_ATOMCAS)
+   coords = emit_data->args[2];
+   else
+   coords = emit_data->args[1];
+
+   build_type_name_for_intr(coords, coords_type, 
sizeof(coords_type));
snprintf(intrinsic_name, sizeof(intrinsic_name),
 "llvm.amdgcn.image.atomic.%s.%s",
 action->intr_name, coords_type);

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