Skip to content

Commit

Permalink
Merge commit '37aa64037425f61bf5c100db6a05a64a17f9daa2' into master_prm
Browse files Browse the repository at this point in the history
  • Loading branch information
JaxLinAMD committed Nov 2, 2021
2 parents 9244bd3 + 37aa640 commit a194b09
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 13 deletions.
33 changes: 24 additions & 9 deletions icd/api/include/vk_sampler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "include/vk_defines.h"
#include "include/vk_dispatch.h"
#include "include/vk_utils.h"
#include "include/vk_sampler_ycbcr_conversion.h"

#include "palUtil.h"

Expand Down Expand Up @@ -70,27 +71,41 @@ class Sampler final : public NonDispatchable<VkSampler, Sampler>
return m_multiPlaneCount;
}

Vkgc::SamplerYCbCrConversionMetaData* GetYCbCrConversionMetaData()
{
return m_pYcbcrConversionMetaData;
}

bool IsYCbCrConversionMetaDataUpdated(const Vkgc::SamplerYCbCrConversionMetaData* pMetaData)
{
return ((m_pYcbcrConversionMetaData->word4.u32All != pMetaData->word4.u32All) ||
(m_pYcbcrConversionMetaData->word5.u32All != pMetaData->word5.u32All));
}

protected:
Sampler(
uint64_t apiHash,
bool isYCbCrSampler,
uint32_t multiPlaneCount,
uint32_t borderColorPaletteIndex)
uint64_t apiHash,
bool isYCbCrSampler,
uint32_t multiPlaneCount,
uint32_t borderColorPaletteIndex,
Vkgc::SamplerYCbCrConversionMetaData* pYcbcrConversionMetaData)
:
m_apiHash(apiHash),
m_isYCbCrSampler(isYCbCrSampler),
m_multiPlaneCount(multiPlaneCount),
m_borderColorPaletteIndex(borderColorPaletteIndex)
m_borderColorPaletteIndex(borderColorPaletteIndex),
m_pYcbcrConversionMetaData(pYcbcrConversionMetaData)
{
}

static uint64_t BuildApiHash(
const VkSamplerCreateInfo* pCreateInfo);

const uint64_t m_apiHash;
const bool m_isYCbCrSampler;
const uint32_t m_multiPlaneCount;
const uint32_t m_borderColorPaletteIndex;
const uint64_t m_apiHash;
const bool m_isYCbCrSampler;
const uint32_t m_multiPlaneCount;
const uint32_t m_borderColorPaletteIndex;
Vkgc::SamplerYCbCrConversionMetaData* m_pYcbcrConversionMetaData;

private:
PAL_DISALLOW_COPY_AND_ASSIGN(Sampler);
Expand Down
2 changes: 2 additions & 0 deletions icd/api/include/vk_sampler_ycbcr_conversion.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ class SamplerYcbcrConversion final : public NonDispatchable<VkSamplerYcbcrConver

Vkgc::SamplerYCbCrConversionMetaData* GetMetaData() {return &m_metaData;}

void SetExtent(uint32 width, uint32 height, uint32 depth);

protected:
SamplerYcbcrConversion(const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const RuntimeSettings& settings);

Expand Down
15 changes: 14 additions & 1 deletion icd/api/vk_descriptor_set_layout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,20 @@ void DescriptorSetLayout::ConvertImmutableInfo(
// Copy the YCbCrMetaData
const void* pYCbCrMetaData = Util::VoidPtrInc(pSamplerDesc, descSizeInDw * sizeof(uint32_t));
void* pImmutableYCbCrMetaDataDestAddr = Util::VoidPtrInc(pDestAddr, descSizeInDw * sizeof(uint32_t));
memcpy(pImmutableYCbCrMetaDataDestAddr, pYCbCrMetaData, yCbCrMetaDataSizeInDW * sizeof(uint32_t));
Sampler* pSampler = Sampler::ObjectFromHandle(pBindingInfo->pImmutableSamplers[i]);
Vkgc::SamplerYCbCrConversionMetaData* pCurrentYCbCrMetaData = pSampler->GetYCbCrConversionMetaData();

if (pSampler->IsYCbCrConversionMetaDataUpdated(
static_cast<const Vkgc::SamplerYCbCrConversionMetaData*>(pYCbCrMetaData)))
{
memcpy(pImmutableYCbCrMetaDataDestAddr, pCurrentYCbCrMetaData,
yCbCrMetaDataSizeInDW * sizeof(uint32_t));
}
else
{
memcpy(pImmutableYCbCrMetaDataDestAddr, pYCbCrMetaData,
yCbCrMetaDataSizeInDW * sizeof(uint32_t));
}
}
}
}
Expand Down
7 changes: 7 additions & 0 deletions icd/api/vk_image_view.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,13 @@ VkResult ImageView::Create(
imageViewUsage = pUsageInfo->usage;
break;
}
case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
{
const auto* pSamplerYcbcrConversionInfo = reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(pHeader);
SamplerYcbcrConversion::ObjectFromHandle(pSamplerYcbcrConversionInfo->conversion)->SetExtent(
imageInfo.extent.width, imageInfo.extent.height, imageInfo.arraySize);
break;
}
default:
// Skip any unknown extension structures
break;
Expand Down
9 changes: 6 additions & 3 deletions icd/api/vk_sampler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ uint64_t Sampler::BuildApiHash(
hasher.Update(pSamplerYCbCrConversionMetaData->word1.u32All);
hasher.Update(pSamplerYCbCrConversionMetaData->word2.u32All);
hasher.Update(pSamplerYCbCrConversionMetaData->word3.u32All);
hasher.Update(pSamplerYCbCrConversionMetaData->word4.u32All);
hasher.Update(pSamplerYCbCrConversionMetaData->word5.u32All);

break;
case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
Expand Down Expand Up @@ -258,9 +260,10 @@ VkResult Sampler::Create(
uint32_t multiPlaneCount = pSamplerYCbCrConversionMetaData != nullptr ? pSamplerYCbCrConversionMetaData->word1.planes : 1;

VK_PLACEMENT_NEW (pMemory) Sampler(apiHash,
(pSamplerYCbCrConversionMetaData != nullptr),
multiPlaneCount,
samplerInfo.borderColorPaletteIndex);
(pSamplerYCbCrConversionMetaData != nullptr),
multiPlaneCount,
samplerInfo.borderColorPaletteIndex,
pSamplerYCbCrConversionMetaData);

*pSampler = Sampler::HandleFromVoidPointer(pMemory);

Expand Down
15 changes: 15 additions & 0 deletions icd/api/vk_sampler_ycbcr_conversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,21 @@ SamplerYcbcrConversion::SamplerYcbcrConversion(
m_metaData.word2.bitCounts.yBitCount = yuvFormatInfo.bitCount[1];
m_metaData.word2.bitCounts.zBitCount = yuvFormatInfo.bitCount[2];
m_metaData.word2.bitCounts.wBitCount = yuvFormatInfo.bitCount[3];

m_metaData.word4.lumaWidth = 0;
m_metaData.word4.lumaHeight = 0;
m_metaData.word5.lumaDepth = 0;
}

// =====================================================================================================================
void SamplerYcbcrConversion::SetExtent(
uint32 width,
uint32 height,
uint32 depth)
{
m_metaData.word4.lumaWidth = width;
m_metaData.word4.lumaHeight = height;
m_metaData.word5.lumaDepth = depth;
}

namespace entry
Expand Down

0 comments on commit a194b09

Please sign in to comment.