vulkan: unify Tex/OutColorManagementData
This commit is contained in:
parent
05bf029a55
commit
a2e089d9e3
6 changed files with 31 additions and 31 deletions
|
|
@ -25,10 +25,10 @@ use {
|
||||||
sampler::VulkanSampler,
|
sampler::VulkanSampler,
|
||||||
semaphore::VulkanSemaphore,
|
semaphore::VulkanSemaphore,
|
||||||
shaders::{
|
shaders::{
|
||||||
FILL_FRAG, FILL_VERT, FillPushConstants, LEGACY_FILL_FRAG, LEGACY_FILL_VERT,
|
ColorManagementData, FILL_FRAG, FILL_VERT, FillPushConstants, LEGACY_FILL_FRAG,
|
||||||
LEGACY_TEX_FRAG, LEGACY_TEX_VERT, LegacyFillPushConstants, LegacyTexPushConstants,
|
LEGACY_FILL_VERT, LEGACY_TEX_FRAG, LEGACY_TEX_VERT, LegacyFillPushConstants,
|
||||||
OUT_FRAG, OUT_VERT, OutColorManagementData, OutPushConstants, TEX_FRAG, TEX_VERT,
|
LegacyTexPushConstants, OUT_FRAG, OUT_VERT, OutPushConstants, TEX_FRAG, TEX_VERT,
|
||||||
TexColorManagementData, TexPushConstants, TexVertex, VulkanShader,
|
TexPushConstants, TexVertex, VulkanShader,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
io_uring::IoUring,
|
io_uring::IoUring,
|
||||||
|
|
@ -352,7 +352,7 @@ impl VulkanDevice {
|
||||||
};
|
};
|
||||||
let uniform_buffer_cache = {
|
let uniform_buffer_cache = {
|
||||||
let usage = BufferUsageFlags::SHADER_DEVICE_ADDRESS | BufferUsageFlags::UNIFORM_BUFFER;
|
let usage = BufferUsageFlags::SHADER_DEVICE_ADDRESS | BufferUsageFlags::UNIFORM_BUFFER;
|
||||||
let align = align_of::<TexColorManagementData>() as DeviceSize;
|
let align = align_of::<ColorManagementData>() as DeviceSize;
|
||||||
VulkanBufferCache::new(self, &allocator, usage, align)
|
VulkanBufferCache::new(self, &allocator, usage, align)
|
||||||
};
|
};
|
||||||
let render = Rc::new(VulkanRenderer {
|
let render = Rc::new(VulkanRenderer {
|
||||||
|
|
@ -575,7 +575,7 @@ impl VulkanRenderer {
|
||||||
if let Some(addr) = memory.blend_buffer_color_management_data_address {
|
if let Some(addr) = memory.blend_buffer_color_management_data_address {
|
||||||
let uniform_buffer = DescriptorAddressInfoEXT::default()
|
let uniform_buffer = DescriptorAddressInfoEXT::default()
|
||||||
.address(addr)
|
.address(addr)
|
||||||
.range(size_of::<OutColorManagementData>() as _);
|
.range(size_of::<ColorManagementData>() as _);
|
||||||
let info = DescriptorGetInfoEXT::default()
|
let info = DescriptorGetInfoEXT::default()
|
||||||
.ty(DescriptorType::UNIFORM_BUFFER)
|
.ty(DescriptorType::UNIFORM_BUFFER)
|
||||||
.data(DescriptorDataEXT {
|
.data(DescriptorDataEXT {
|
||||||
|
|
@ -603,7 +603,7 @@ impl VulkanRenderer {
|
||||||
if let Some(addr) = c.color_management_data_address {
|
if let Some(addr) = c.color_management_data_address {
|
||||||
let uniform_buffer = DescriptorAddressInfoEXT::default()
|
let uniform_buffer = DescriptorAddressInfoEXT::default()
|
||||||
.address(addr)
|
.address(addr)
|
||||||
.range(size_of::<TexColorManagementData>() as _);
|
.range(size_of::<ColorManagementData>() as _);
|
||||||
let info = DescriptorGetInfoEXT::default()
|
let info = DescriptorGetInfoEXT::default()
|
||||||
.ty(DescriptorType::UNIFORM_BUFFER)
|
.ty(DescriptorType::UNIFORM_BUFFER)
|
||||||
.data(DescriptorDataEXT {
|
.data(DescriptorDataEXT {
|
||||||
|
|
@ -2233,7 +2233,7 @@ impl ColorTransforms {
|
||||||
) -> Option<DeviceSize> {
|
) -> Option<DeviceSize> {
|
||||||
let ct = self.get_or_create(src, dst)?;
|
let ct = self.get_or_create(src, dst)?;
|
||||||
if ct.offset.is_none() {
|
if ct.offset.is_none() {
|
||||||
let data = TexColorManagementData {
|
let data = ColorManagementData {
|
||||||
matrix: ct.matrix.to_f32(),
|
matrix: ct.matrix.to_f32(),
|
||||||
};
|
};
|
||||||
let offset = writer.write(uniform_buffer_offset_mask, &data);
|
let offset = writer.write(uniform_buffer_offset_mask, &data);
|
||||||
|
|
|
||||||
|
|
@ -63,19 +63,11 @@ unsafe impl Packed for TexPushConstants {}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
#[repr(C, align(16))]
|
#[repr(C, align(16))]
|
||||||
pub struct TexColorManagementData {
|
pub struct ColorManagementData {
|
||||||
pub matrix: [[f32; 4]; 4],
|
pub matrix: [[f32; 4]; 4],
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl Packed for TexColorManagementData {}
|
unsafe impl Packed for ColorManagementData {}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
|
||||||
#[repr(C, align(16))]
|
|
||||||
pub struct OutColorManagementData {
|
|
||||||
pub matrix: [[f32; 4]; 4],
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe impl Packed for OutColorManagementData {}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
#define EOTFS_GLSL
|
#define EOTFS_GLSL
|
||||||
|
|
||||||
#include "frag_spec_const.glsl"
|
#include "frag_spec_const.glsl"
|
||||||
|
#include "tex_set.glsl"
|
||||||
|
|
||||||
#define TF_LINEAR 1
|
#define TF_LINEAR 1
|
||||||
#define TF_ST2084_PQ 2
|
#define TF_ST2084_PQ 2
|
||||||
|
|
|
||||||
|
|
@ -3,18 +3,17 @@
|
||||||
#extension GL_EXT_samplerless_texture_functions : require
|
#extension GL_EXT_samplerless_texture_functions : require
|
||||||
#extension GL_EXT_scalar_block_layout : require
|
#extension GL_EXT_scalar_block_layout : require
|
||||||
|
|
||||||
#include "frag_spec_const.glsl"
|
#define TEX_SET 0
|
||||||
#include "eotfs.glsl"
|
|
||||||
#include "out.common.glsl"
|
#include "frag_spec_const.glsl"
|
||||||
|
#include "out.common.glsl"
|
||||||
|
#include "tex_set.glsl"
|
||||||
|
#include "eotfs.glsl"
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform texture2D in_color;
|
|
||||||
layout(set = 0, binding = 1, row_major, std430) uniform ColorManagementData {
|
|
||||||
mat4x4 matrix;
|
|
||||||
} cm_data;
|
|
||||||
layout(location = 0) out vec4 out_color;
|
layout(location = 0) out vec4 out_color;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
vec4 c = texelFetch(in_color, ivec2(gl_FragCoord.xy), 0);
|
vec4 c = texelFetch(tex, ivec2(gl_FragCoord.xy), 0);
|
||||||
if (eotf != inv_eotf || has_matrix) {
|
if (eotf != inv_eotf || has_matrix) {
|
||||||
vec3 rgb = c.rgb;
|
vec3 rgb = c.rgb;
|
||||||
rgb /= mix(c.a, 1.0, c.a == 0.0);
|
rgb /= mix(c.a, 1.0, c.a == 0.0);
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,14 @@
|
||||||
|
|
||||||
#extension GL_EXT_scalar_block_layout : require
|
#extension GL_EXT_scalar_block_layout : require
|
||||||
|
|
||||||
|
#define TEX_SET 1
|
||||||
|
|
||||||
#include "frag_spec_const.glsl"
|
#include "frag_spec_const.glsl"
|
||||||
#include "eotfs.glsl"
|
|
||||||
#include "tex.common.glsl"
|
#include "tex.common.glsl"
|
||||||
|
#include "tex_set.glsl"
|
||||||
|
#include "eotfs.glsl"
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler sam;
|
layout(set = 0, binding = 0) uniform sampler sam;
|
||||||
layout(set = 1, binding = 0) uniform texture2D tex;
|
|
||||||
layout(set = 1, binding = 1, row_major, std430) uniform ColorManagementData {
|
|
||||||
mat4x4 matrix;
|
|
||||||
} cm_data;
|
|
||||||
layout(location = 0) in vec2 tex_pos;
|
layout(location = 0) in vec2 tex_pos;
|
||||||
layout(location = 0) out vec4 out_color;
|
layout(location = 0) out vec4 out_color;
|
||||||
|
|
||||||
|
|
|
||||||
9
src/gfx_apis/vulkan/shaders/tex_set.glsl
Normal file
9
src/gfx_apis/vulkan/shaders/tex_set.glsl
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef TEX_SET_GLSL
|
||||||
|
#define TEX_SET_GLSL
|
||||||
|
|
||||||
|
layout(set = TEX_SET, binding = 0) uniform texture2D tex;
|
||||||
|
layout(set = TEX_SET, binding = 1, row_major, std430) uniform ColorManagementData {
|
||||||
|
mat4x4 matrix;
|
||||||
|
} cm_data;
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
Add table
Add a link
Reference in a new issue