Skip to content

Commit

Permalink
JBR-8398 Vulkan: refactor shader code to use transforms
Browse files Browse the repository at this point in the history
Replaced normalization logic with transform matrix
  • Loading branch information
avu authored and jbrbot committed Mar 10, 2025
1 parent 869168f commit cfa81d2
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 14 deletions.
4 changes: 2 additions & 2 deletions src/java.desktop/share/glsl/vulkan/blit.vert
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#version 450

layout(push_constant) uniform PushConstants {
vec2 viewportNormalizer; // 2.0 / viewport
mat2x3 transform;
} push;

layout(location = 0) in vec2 in_Position;
layout(location = 1) in vec2 in_TexCoord;
layout(location = 0) out vec2 out_TexCoord;

void main() {
gl_Position = vec4(in_Position * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
gl_Position = vec4(vec3(in_Position, 1.0)*push.transform, 0.0, 1.0);
out_TexCoord = in_TexCoord;
}
4 changes: 2 additions & 2 deletions src/java.desktop/share/glsl/vulkan/clip.vert
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#version 450

layout(push_constant) uniform PushConstants {
vec2 viewportNormalizer; // 2.0 / viewport
mat2x3 transform;
} push;

layout(location = 0) in ivec2 in_Position;

void main() {
gl_Position = vec4(vec2(in_Position) * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
gl_Position = vec4(vec3(in_Position, 1)*push.transform, 0.0, 1.0);
}
4 changes: 2 additions & 2 deletions src/java.desktop/share/glsl/vulkan/color.vert
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#version 450

layout(push_constant) uniform PushConstants {
vec2 viewportNormalizer; // 2.0 / viewport
mat2x3 transform;
} push;

layout(location = 0) in vec2 in_Position;
layout(location = 1) in vec4 in_Color;
layout(location = 0) out flat vec4 out_Color;

void main() {
gl_Position = vec4(in_Position * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
gl_Position = vec4(vec3(in_Position, 1)*push.transform, 0.0, 1.0);
out_Color = in_Color;
}
4 changes: 2 additions & 2 deletions src/java.desktop/share/glsl/vulkan/mask_fill_color.vert
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#version 450

layout(push_constant) uniform PushConstants {
vec2 viewportNormalizer; // 2.0 / viewport
mat2x3 transform;
} push;

layout(location = 0) in ivec4 in_PositionOffsetAndScanline;
Expand All @@ -14,7 +14,7 @@ layout(location = 0) out flat ivec4 out_OriginOffsetAndScanline;
layout(location = 1) out flat vec4 out_Color;

void main() {
gl_Position = vec4(vec2(in_PositionOffsetAndScanline.xy) * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
gl_Position = vec4(vec3(in_PositionOffsetAndScanline.xy, 1)*push.transform, 0.0, 1.0);
out_OriginOffsetAndScanline = in_PositionOffsetAndScanline;
out_Color = in_Color;
}
11 changes: 7 additions & 4 deletions src/java.desktop/share/native/common/java2d/vulkan/VKRenderer.c
Original file line number Diff line number Diff line change
Expand Up @@ -738,15 +738,18 @@ static void VKRenderer_BeginRenderPass(VKSDOps* surface) {
};
device->vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
// Calculate inverse viewport for vertex shader.
viewport.width = 2.0f / viewport.width;
viewport.height = 2.0f / viewport.height;
VKTransform transform = {
2.0f/viewport.width,0.0f, -1.0f,
0.0f,2.0f/viewport.height, -1.0f
};

device->vkCmdPushConstants(
commandBuffer,
renderer->pipelineContext->colorPipelineLayout, // TODO what if our pipeline layout differs?
VK_SHADER_STAGE_VERTEX_BIT,
0,
sizeof(float) * 2,
&viewport.width
sizeof(VKTransform),
&transform
);

surface->renderPass->pendingCommands = VK_TRUE;
Expand Down
4 changes: 2 additions & 2 deletions src/java.desktop/share/native/common/java2d/vulkan/VKTypes.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ typedef union {
* [ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
*/
typedef struct {
double m00, m01, m02;
double m10, m11, m12;
float m00, m01, m02;
float m10 __attribute__((aligned(16))), m11, m12;
} VKTransform;

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VKMemory);
Expand Down

0 comments on commit cfa81d2

Please sign in to comment.