mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-11-30 04:24:11 +01:00
[dxvk] Added meta shaders for image/buffer clear operations
The D3D11 ClearUnorderedAccessView* and ClearView functions will have to be emulated using compute shaders rather than clear operations, since Vulkan clear operations do not take image views and their format into account.
This commit is contained in:
parent
4797645bd2
commit
6a0ab19049
23
src/dxvk/shaders/dxvk_clear_buffer_f.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_buffer_f.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform imageBuffer dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
vec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (thread_id.x < u_info.dst_size.x)
|
||||
imageStore(dst, thread_id.x + u_info.dst_offset.x, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_buffer_u.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_buffer_u.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform uimageBuffer dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
uvec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (thread_id.x < u_info.dst_size.x)
|
||||
imageStore(dst, thread_id.x + u_info.dst_offset.x, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image1d_f.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image1d_f.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform image1DArray dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
vec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xy, u_info.dst_size.xy)))
|
||||
imageStore(dst, thread_id.xy + u_info.dst_offset.xy, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image1d_u.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image1d_u.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform uimage1DArray dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
uvec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xy, u_info.dst_size.xy)))
|
||||
imageStore(dst, thread_id.xy + u_info.dst_offset.xy, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image2d_f.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image2d_f.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform image2DArray dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
vec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xyz, u_info.dst_size.xyz)))
|
||||
imageStore(dst, thread_id.xyz + u_info.dst_offset.xyz, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image2d_u.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image2d_u.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform uimage2DArray dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
uvec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xyz, u_info.dst_size.xyz)))
|
||||
imageStore(dst, thread_id.xyz + u_info.dst_offset.xyz, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image3d_f.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image3d_f.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform image3D dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
vec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xyz, u_info.dst_size.xyz)))
|
||||
imageStore(dst, thread_id.xyz + u_info.dst_offset.xyz, u_info.clear_value);
|
||||
}
|
23
src/dxvk/shaders/dxvk_clear_image3d_u.comp
Normal file
23
src/dxvk/shaders/dxvk_clear_image3d_u.comp
Normal file
@ -0,0 +1,23 @@
|
||||
#version 450
|
||||
|
||||
layout(
|
||||
local_size_x = 64,
|
||||
local_size_y = 1,
|
||||
local_size_z = 1) in;
|
||||
|
||||
layout(binding = 0)
|
||||
writeonly uniform uimage3D dst;
|
||||
|
||||
layout(push_constant)
|
||||
uniform u_info_t {
|
||||
uvec4 clear_value;
|
||||
ivec4 dst_offset;
|
||||
ivec4 dst_size;
|
||||
} u_info;
|
||||
|
||||
void main() {
|
||||
ivec3 thread_id = ivec3(gl_GlobalInvocationID.x);
|
||||
|
||||
if (all(lessThan(thread_id.xyz, u_info.dst_size.xyz)))
|
||||
imageStore(dst, thread_id.xyz + u_info.dst_offset.xyz, u_info.clear_value);
|
||||
}
|
Loading…
Reference in New Issue
Block a user