Mesa (master): swr: [rasterizer core] don' t construct pArContext on non-ar builds
Module: Mesa Branch: master Commit: a42c22fdbfcdd0d24a51e1575f2e1f3340bfbeda URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a42c22fdbfcdd0d24a51e1575f2e1f3340bfbeda Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: 29d07480b8e7b8e5529e6a824b7d99e9677a1816 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=29d07480b8e7b8e5529e6a824b7d99e9677a1816 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: ada27b503eab3c53d9ec1bca2cef48c5353e81f9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ada27b503eab3c53d9ec1bca2cef48c5353e81f9 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: bf1f46216cbe9e293e51a44187ee53a5b883c848 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf1f46216cbe9e293e51a44187ee53a5b883c848 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: f0a66c1da26eb35d2032b8100b96ad73aa22b836 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0a66c1da26eb35d2032b8100b96ad73aa22b836 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: 488992221056edaf7111f9290afdf216c5e98d62 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=488992221056edaf7111f9290afdf216c5e98d62 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: ffd0224303f1e9472fe832dcd9281a63fbb45e39 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ffd0224303f1e9472fe832dcd9281a63fbb45e39 Author: Tim RowleyDate: 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
Module: Mesa Branch: master Commit: 827e038062bb7247a7b59b8f97d07b4c1b7be276 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=827e038062bb7247a7b59b8f97d07b4c1b7be276 Author: Eric EngestromDate: 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
Module: Mesa Branch: master Commit: afb6dc53bff58c137d07ca5b58c50debce5729d8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=afb6dc53bff58c137d07ca5b58c50debce5729d8 Author: Ilia MirkinDate: 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
Module: Mesa Branch: master Commit: a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6d6eff2e6ea2ccd585fe9bf1e159979cd3047df Author: Ilia MirkinDate: 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()
Module: Mesa Branch: master Commit: d6b00021950a03fc6ff39e63f4c079b956c80c92 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d6b00021950a03fc6ff39e63f4c079b956c80c92 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: b81546d43c4ae670babfc496f7d5cce1c1a22399 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b81546d43c4ae670babfc496f7d5cce1c1a22399 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: c328268b9292664bd5de73ee39ed8b91ccfb38d1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c328268b9292664bd5de73ee39ed8b91ccfb38d1 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: c89802aeeaee35e06c98a41dd630a60e8e7e4123 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c89802aeeaee35e06c98a41dd630a60e8e7e4123 Author: Brian PaulDate: 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()
Module: Mesa Branch: master Commit: 0de9265b1f10a791044342a05829b72f0cc133dc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0de9265b1f10a791044342a05829b72f0cc133dc Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: ff00ab745c9a9d6ef35239ea656a5db0c76de52d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff00ab745c9a9d6ef35239ea656a5db0c76de52d Author: Brian PaulDate: 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()
Module: Mesa Branch: master Commit: a710c21ac200fc1c80a6209862e837f0a75f4cc5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a710c21ac200fc1c80a6209862e837f0a75f4cc5 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: 15fb88e912531110f1a31ede2100910fdda2823e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=15fb88e912531110f1a31ede2100910fdda2823e Author: Brian PaulDate: 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()
Module: Mesa Branch: master Commit: 3a2869aacabc0021d757de0a6055e1e530d82e81 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a2869aacabc0021d757de0a6055e1e530d82e81 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: 743a52637258a602eb4ea891b5c3bca0032724c7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=743a52637258a602eb4ea891b5c3bca0032724c7 Author: Brian PaulDate: 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
Module: Mesa Branch: master Commit: 74745dcfa4c17c9d1ec3ce5021bab76fdb4d3b3b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=74745dcfa4c17c9d1ec3ce5021bab76fdb4d3b3b Author: Brian PaulDate: 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().
Module: Mesa Branch: master Commit: 99d790538de2e7d7d489a8638b13c5aa069c27c3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=99d790538de2e7d7d489a8638b13c5aa069c27c3 Author: Eric AnholtDate: 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
Module: Mesa Branch: master Commit: 0717cd975d85eb04389d84c54b796863aa537cf0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0717cd975d85eb04389d84c54b796863aa537cf0 Author: Axel DavyDate: 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
Module: Mesa Branch: master Commit: 98b8ad61c6bc531646bec1e773b0f57f99e47159 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=98b8ad61c6bc531646bec1e773b0f57f99e47159 Author: Axel DavyDate: 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
Module: Mesa Branch: master Commit: 197cdd1bbdafaf44dc705e518987a08953b092ab URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=197cdd1bbdafaf44dc705e518987a08953b092ab Author: Axel DavyDate: 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
Module: Mesa Branch: master Commit: 452722216954c95f0a8ca1f2a610185ae0bd2a63 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=452722216954c95f0a8ca1f2a610185ae0bd2a63 Author: Samuel PitoisetDate: 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
Module: Mesa Branch: master Commit: 47a7d86fe907932c40484ccdeefeac269bbb0810 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=47a7d86fe907932c40484ccdeefeac269bbb0810 Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: a3834ebaf9ea8ff6826651392978cdb73b7fab96 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3834ebaf9ea8ff6826651392978cdb73b7fab96 Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: 5c66d46d6ace0603227e4b919b132416444949e7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c66d46d6ace0603227e4b919b132416444949e7 Author: Tom StellardDate: 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
Module: Mesa Branch: master Commit: 30e63fb0e48cefb44dc4c28e0f282bdbb34c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=30e63fb0e48cefb44dc4c28e0f282bdbb34c Author: Tom StellardDate: 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
Module: Mesa Branch: master Commit: 060e6f468a35bcf3fbc425b489ef1f39be808e81 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=060e6f468a35bcf3fbc425b489ef1f39be808e81 Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: 8980ac041167fb5a80be76e2f912b96117afa2cf URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8980ac041167fb5a80be76e2f912b96117afa2cf Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: 8bdac874e667179bd2682f0111cd7db58b858e5b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8bdac874e667179bd2682f0111cd7db58b858e5b Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: dfe74fd1a9e16647e0f2673d3676264f2a588a95 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=dfe74fd1a9e16647e0f2673d3676264f2a588a95 Author: Dave AirlieDate: 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
Module: Mesa Branch: master Commit: e12c1cab5d571c215f65bd9f3fc1629c090ed948 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e12c1cab5d571c215f65bd9f3fc1629c090ed948 Author: Marek OlšákDate: 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
Module: Mesa Branch: master Commit: 7dddf0b7ab9a222a79b647082ebfb8787c8559ac URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7dddf0b7ab9a222a79b647082ebfb8787c8559ac Author: Marek OlšákDate: 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
Module: Mesa Branch: master Commit: a077185ea9d685967844b68aa09da6bd8aa430da URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a077185ea9d685967844b68aa09da6bd8aa430da Author: Marek OlšákDate: 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
Module: Mesa Branch: master Commit: d4d9ec55c589156df4edc227a86b4a8c41048d58 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d4d9ec55c589156df4edc227a86b4a8c41048d58 Author: Marek OlšákDate: 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
Module: Mesa Branch: master Commit: 761388a0eb586b1dcaec063ee561056ed132dc1a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=761388a0eb586b1dcaec063ee561056ed132dc1a Author: Nicolai HähnleDate: 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
Module: Mesa Branch: master Commit: d413fbb159d0ddac16bb9d93bdda4fe598d39e17 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d413fbb159d0ddac16bb9d93bdda4fe598d39e17 Author: Nicolai HähnleDate: 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
Module: Mesa Branch: master Commit: 15fc74905b64ab41e47d5b50407596ceaeced638 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=15fc74905b64ab41e47d5b50407596ceaeced638 Author: Nicolai HähnleDate: 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
Module: Mesa Branch: master Commit: b234e377650c8280d56060ff38c55af9d7772ee4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b234e377650c8280d56060ff38c55af9d7772ee4 Author: Nicolai HähnleDate: 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
Module: Mesa Branch: master Commit: 1d7685e52ca64f6fcc66b8816b5adb8513b4ae18 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1d7685e52ca64f6fcc66b8816b5adb8513b4ae18 Author: Nicolai HähnleDate: 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.*
Module: Mesa Branch: master Commit: 76a940893de634a50b9149a5f3f37c33fbf4f484 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=76a940893de634a50b9149a5f3f37c33fbf4f484 Author: Nicolai HähnleDate: 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