diff --git a/src/d3d9/d3d9_common_texture.cpp b/src/d3d9/d3d9_common_texture.cpp index 33be05ead..bbcd890d3 100644 --- a/src/d3d9/d3d9_common_texture.cpp +++ b/src/d3d9/d3d9_common_texture.cpp @@ -153,7 +153,7 @@ namespace dxvk { | VK_ACCESS_TRANSFER_WRITE_BIT; if (m_mapping.ConversionFormatInfo.FormatType != D3D9ConversionFormat_None) { - info.usage |= VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT; + info.usage |= VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT; info.stages |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; } diff --git a/src/d3d9/d3d9_format_helpers.cpp b/src/d3d9/d3d9_format_helpers.cpp index 460b3c262..9a76eecc3 100644 --- a/src/d3d9/d3d9_format_helpers.cpp +++ b/src/d3d9/d3d9_format_helpers.cpp @@ -131,8 +131,8 @@ namespace dxvk { Rc D3D9FormatHelper::InitShader(SpirvCodeBuffer code) { const std::array resourceSlots = { { - { BindingIds::Image, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_IMAGE_VIEW_TYPE_2D }, - { BindingIds::Buffer, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, VK_IMAGE_VIEW_TYPE_1D }, + { BindingIds::Image, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, VK_IMAGE_VIEW_TYPE_2D }, + { BindingIds::Buffer, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, VK_IMAGE_VIEW_TYPE_1D }, } }; return m_device->createShader( diff --git a/src/d3d9/shaders/d3d9_convert_l6v5u5.comp b/src/d3d9/shaders/d3d9_convert_l6v5u5.comp index 942ee05d5..122d2957a 100644 --- a/src/d3d9/shaders/d3d9_convert_l6v5u5.comp +++ b/src/d3d9/shaders/d3d9_convert_l6v5u5.comp @@ -1,5 +1,4 @@ #version 450 -#extension GL_EXT_shader_16bit_storage : enable layout( local_size_x = 8, @@ -9,10 +8,7 @@ layout( layout(binding = 0) writeonly uniform image2D dst; -layout(binding = 1) -readonly buffer _buffer_t { - uint16_t data[]; -} src; +layout(binding = 1) uniform usamplerBuffer src; layout(push_constant) uniform u_info_t { @@ -40,7 +36,7 @@ void main() { uint offset = thread_id.x + thread_id.y * u_info.extent.x; - uint value = uint(src.data[offset]); + uint value = texelFetch(src, int(offset)).r; // Sign-extend magic! int u5 = bitfieldExtract(int (value), 0, 5); diff --git a/src/d3d9/shaders/d3d9_convert_yuy2_uyvy.comp b/src/d3d9/shaders/d3d9_convert_yuy2_uyvy.comp index d4ae32344..1509906cc 100644 --- a/src/d3d9/shaders/d3d9_convert_yuy2_uyvy.comp +++ b/src/d3d9/shaders/d3d9_convert_yuy2_uyvy.comp @@ -10,10 +10,7 @@ layout( layout(binding = 0) writeonly uniform image2D dst; -layout(binding = 1) -readonly buffer yuy2_buffer_t { - uint data[]; -} src; +layout(binding = 1) uniform usamplerBuffer src; layout(push_constant) uniform u_info_t { @@ -39,7 +36,9 @@ void main() { uint offset = thread_id.x + thread_id.y * u_info.extent.x; - vec4 data = unpackUnorm4x8(src.data[offset]); + uint value = texelFetch(src, int(offset)).r; + + vec4 data = unpackUnorm4x8(value); // Flip around stuff for UYVY if (s_is_uyvy)