From ba5f319809391ffe71b44688d4656081c40b3634 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 30 Sep 2019 02:08:38 +0200 Subject: [PATCH] [dxvk] Use new shader lookup hash in pipeline manager --- src/dxvk/dxvk_pipemanager.cpp | 17 ++++++++++------- src/dxvk/dxvk_pipemanager.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/dxvk/dxvk_pipemanager.cpp b/src/dxvk/dxvk_pipemanager.cpp index 378bb3d19..b1ddecaea 100644 --- a/src/dxvk/dxvk_pipemanager.cpp +++ b/src/dxvk/dxvk_pipemanager.cpp @@ -12,15 +12,18 @@ namespace dxvk { size_t DxvkPipelineKeyHash::operator () (const DxvkGraphicsPipelineShaders& key) const { DxvkHashState state; - - std::hash hash; - state.add(hash(key.vs.ptr())); - state.add(hash(key.tcs.ptr())); - state.add(hash(key.tes.ptr())); - state.add(hash(key.gs.ptr())); - state.add(hash(key.fs.ptr())); + state.add(getShaderHash(key.vs)); + state.add(getShaderHash(key.tcs)); + state.add(getShaderHash(key.tes)); + state.add(getShaderHash(key.gs)); + state.add(getShaderHash(key.fs)); return state; } + + + size_t DxvkPipelineKeyHash::getShaderHash(const Rc& shader) { + return shader != nullptr ? shader->getHash() : 0; + } bool DxvkPipelineKeyEq::operator () ( diff --git a/src/dxvk/dxvk_pipemanager.h b/src/dxvk/dxvk_pipemanager.h index f0087d155..5820c7661 100644 --- a/src/dxvk/dxvk_pipemanager.h +++ b/src/dxvk/dxvk_pipemanager.h @@ -26,6 +26,7 @@ namespace dxvk { struct DxvkPipelineKeyHash { size_t operator () (const DxvkComputePipelineShaders& key) const; size_t operator () (const DxvkGraphicsPipelineShaders& key) const; + static size_t getShaderHash(const Rc& shader); };