WIP: Vulkan: Workbench #107886
|
@ -396,13 +396,11 @@ static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB9_E5()
|
|||
GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_RGB9_E5);
|
||||
#endif
|
||||
|
||||
#if RUN_UNSUPPORTED
|
||||
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT32F()
|
||||
{
|
||||
texture_create_upload_read_with_bias<GPU_DEPTH_COMPONENT32F, GPU_DATA_FLOAT>(0.0f);
|
||||
}
|
||||
GPU_TEST(texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT32F);
|
||||
#endif
|
||||
|
||||
static void test_texture_roundtrip__GPU_DATA_FLOAT__GPU_DEPTH_COMPONENT24()
|
||||
{
|
||||
|
@ -590,7 +588,6 @@ static void test_texture_roundtrip__GPU_DATA_UINT__GPU_R32UI()
|
|||
}
|
||||
GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_R32UI);
|
||||
|
||||
#if RUN_UNSUPPORTED
|
||||
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH32F_STENCIL8()
|
||||
{
|
||||
texture_create_upload_read<GPU_DEPTH32F_STENCIL8, GPU_DATA_UINT, uint32_t>();
|
||||
|
@ -602,7 +599,6 @@ static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH24_STENCIL8()
|
|||
texture_create_upload_read<GPU_DEPTH24_STENCIL8, GPU_DATA_UINT, uint32_t>();
|
||||
}
|
||||
GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH24_STENCIL8);
|
||||
#endif
|
||||
|
||||
#if RUN_UNSUPPORTED
|
||||
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_RGB8UI()
|
||||
|
@ -630,13 +626,13 @@ static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT24()
|
|||
}
|
||||
GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT24);
|
||||
|
||||
#if RUN_COMPONENT_UNIMPLEMENTED
|
||||
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT32F()
|
||||
{
|
||||
texture_create_upload_read<GPU_DEPTH_COMPONENT32F, GPU_DATA_UINT, uint32_t>();
|
||||
}
|
||||
GPU_TEST(texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT32F);
|
||||
|
||||
#if RUN_COMPONENT_UNIMPLEMENTED
|
||||
static void test_texture_roundtrip__GPU_DATA_UINT__GPU_DEPTH_COMPONENT16()
|
||||
{
|
||||
texture_create_upload_read<GPU_DEPTH_COMPONENT16, GPU_DATA_UINT, uint32_t>();
|
||||
|
|
|
@ -31,6 +31,9 @@ enum class ConversionType {
|
|||
FLOAT_TO_SNORM16,
|
||||
SNORM16_TO_FLOAT,
|
||||
|
||||
FLOAT_TO_UNORM32,
|
||||
UNORM32_TO_FLOAT,
|
||||
|
||||
UI32_TO_UI16,
|
||||
UI16_TO_UI32,
|
||||
|
||||
|
@ -252,6 +255,10 @@ static ConversionType type_of_conversion_uint(eGPUTextureFormat device_format)
|
|||
case GPU_R8UI:
|
||||
return ConversionType::UI32_TO_UI8;
|
||||
|
||||
case GPU_DEPTH_COMPONENT32F:
|
||||
case GPU_DEPTH32F_STENCIL8:
|
||||
return ConversionType::UNORM32_TO_FLOAT;
|
||||
|
||||
case GPU_RGBA8I:
|
||||
case GPU_RGBA8:
|
||||
case GPU_RGBA16I:
|
||||
|
@ -276,7 +283,6 @@ static ConversionType type_of_conversion_uint(eGPUTextureFormat device_format)
|
|||
case GPU_RGB10_A2:
|
||||
case GPU_RGB10_A2UI:
|
||||
case GPU_R11F_G11F_B10F:
|
||||
case GPU_DEPTH32F_STENCIL8:
|
||||
case GPU_DEPTH24_STENCIL8:
|
||||
case GPU_SRGB8_A8:
|
||||
case GPU_RGBA8_SNORM:
|
||||
|
@ -304,7 +310,6 @@ static ConversionType type_of_conversion_uint(eGPUTextureFormat device_format)
|
|||
case GPU_RGBA8_DXT5:
|
||||
case GPU_SRGB8:
|
||||
case GPU_RGB9_E5:
|
||||
case GPU_DEPTH_COMPONENT32F:
|
||||
case GPU_DEPTH_COMPONENT16:
|
||||
return ConversionType::UNSUPPORTED;
|
||||
}
|
||||
|
@ -522,6 +527,7 @@ static ConversionType reversed(ConversionType type)
|
|||
CASE_PAIR(FLOAT, SNORM8)
|
||||
CASE_PAIR(FLOAT, UNORM16)
|
||||
CASE_PAIR(FLOAT, SNORM16)
|
||||
CASE_PAIR(FLOAT, UNORM32)
|
||||
CASE_PAIR(UI32, UI16)
|
||||
CASE_PAIR(I32, I16)
|
||||
CASE_PAIR(UI32, UI8)
|
||||
|
@ -630,6 +636,7 @@ template<typename InnerType> struct SignedNormalized {
|
|||
|
||||
template<typename InnerType> struct UnsignedNormalized {
|
||||
static_assert(std::is_same<InnerType, uint8_t>() || std::is_same<InnerType, uint16_t>() ||
|
||||
std::is_same<InnerType, uint32_t>() ||
|
||||
std::is_same<InnerType, DepthComponent24>());
|
||||
InnerType value;
|
||||
|
||||
|
@ -643,15 +650,24 @@ template<typename InnerType> struct UnsignedNormalized {
|
|||
}
|
||||
}
|
||||
|
||||
static constexpr int32_t scalar()
|
||||
static constexpr uint32_t scalar()
|
||||
{
|
||||
|
||||
return (1 << (used_byte_size() * 8)) - 1;
|
||||
if constexpr (std::is_same<InnerType, DepthComponent24>()) {
|
||||
return (1 << (used_byte_size() * 8)) - 1;
|
||||
}
|
||||
else {
|
||||
return std::numeric_limits<InnerType>::max();
|
||||
}
|
||||
}
|
||||
|
||||
static constexpr int32_t max()
|
||||
static constexpr uint32_t max()
|
||||
{
|
||||
return ((1 << (used_byte_size() * 8)) - 1);
|
||||
if constexpr (std::is_same<InnerType, DepthComponent24>()) {
|
||||
return (1 << (used_byte_size() * 8)) - 1;
|
||||
}
|
||||
else {
|
||||
return std::numeric_limits<InnerType>::max();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -672,15 +688,15 @@ template<typename StorageType> void convert(F32 &dst, const SignedNormalized<Sto
|
|||
|
||||
template<typename StorageType> void convert(UnsignedNormalized<StorageType> &dst, const F32 &src)
|
||||
{
|
||||
static constexpr int32_t scalar = UnsignedNormalized<StorageType>::scalar();
|
||||
static constexpr int32_t max = scalar;
|
||||
dst.value = (clamp_i((src.value * scalar), 0, max));
|
||||
static constexpr uint32_t scalar = UnsignedNormalized<StorageType>::scalar();
|
||||
static constexpr uint32_t max = scalar;
|
||||
dst.value = (clamp_f((src.value * scalar), 0, max));
|
||||
}
|
||||
|
||||
template<typename StorageType> void convert(F32 &dst, const UnsignedNormalized<StorageType> &src)
|
||||
{
|
||||
static constexpr int32_t scalar = UnsignedNormalized<StorageType>::scalar();
|
||||
dst.value = float(int32_t(src.value)) / scalar;
|
||||
static constexpr uint32_t scalar = UnsignedNormalized<StorageType>::scalar();
|
||||
dst.value = float(uint32_t(src.value)) / scalar;
|
||||
}
|
||||
|
||||
/* Copy the contents of src to dst with out performing any actual conversion. */
|
||||
|
@ -858,6 +874,15 @@ static void convert_buffer(void *dst_memory,
|
|||
dst_memory, src_memory, buffer_size, device_format);
|
||||
break;
|
||||
|
||||
case ConversionType::FLOAT_TO_UNORM32:
|
||||
convert_per_component<UnsignedNormalized<uint32_t>, F32>(
|
||||
dst_memory, src_memory, buffer_size, device_format);
|
||||
break;
|
||||
case ConversionType::UNORM32_TO_FLOAT:
|
||||
convert_per_component<F32, UnsignedNormalized<uint32_t>>(
|
||||
dst_memory, src_memory, buffer_size, device_format);
|
||||
break;
|
||||
|
||||
case ConversionType::FLOAT_TO_HALF:
|
||||
convert_per_component<F16, F32>(dst_memory, src_memory, buffer_size, device_format);
|
||||
break;
|
||||
|
|
|
@ -118,9 +118,9 @@ void VKVertexBuffer::resize_data()
|
|||
|
||||
void VKVertexBuffer::release_data()
|
||||
{
|
||||
if (should_unbind_) {
|
||||
VKContext &context = *VKContext::get();
|
||||
context.state_manager_get().texel_buffer_unbind(this);
|
||||
VKContext *context = VKContext::get();
|
||||
if (should_unbind_ && context) {
|
||||
context->state_manager_get().texel_buffer_unbind(this);
|
||||
}
|
||||
|
||||
if (vk_buffer_view_ != VK_NULL_HANDLE) {
|
||||
|
|
Loading…
Reference in New Issue