Skip to content

Commit d010e33

Browse files
avujbrbot
authored andcommitted
JBR-8398 Vulkan: refactor shader code to use transforms
Replaced normalization logic with transform matrix
1 parent 4ccec9c commit d010e33

7 files changed

Lines changed: 18 additions & 15 deletions

File tree

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#version 450
22

33
layout(push_constant) uniform PushConstants {
4-
vec2 viewportNormalizer; // 2.0 / viewport
4+
mat2x3 transform;
55
} push;
66

77
layout(location = 0) in vec2 in_Position;
88
layout(location = 1) in vec2 in_TexCoord;
99
layout(location = 0) out vec2 out_TexCoord;
1010

1111
void main() {
12-
gl_Position = vec4(in_Position * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
12+
gl_Position = vec4(vec3(in_Position, 1.0)*push.transform, 0.0, 1.0);
1313
out_TexCoord = in_TexCoord;
1414
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#version 450
22

33
layout(push_constant) uniform PushConstants {
4-
vec2 viewportNormalizer; // 2.0 / viewport
4+
mat2x3 transform;
55
} push;
66

77
layout(location = 0) in ivec2 in_Position;
88

99
void main() {
10-
gl_Position = vec4(vec2(in_Position) * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
10+
gl_Position = vec4(vec3(in_Position, 1)*push.transform, 0.0, 1.0);
1111
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#version 450
22

33
layout(push_constant) uniform PushConstants {
4-
vec2 viewportNormalizer; // 2.0 / viewport
4+
mat2x3 transform;
55
} push;
66

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

1111
void main() {
12-
gl_Position = vec4(in_Position * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
12+
gl_Position = vec4(vec3(in_Position, 1)*push.transform, 0.0, 1.0);
1313
out_Color = in_Color;
1414
}

src/java.desktop/share/glsl/vulkan/mask_fill_color.vert

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#version 450
22

33
layout(push_constant) uniform PushConstants {
4-
vec2 viewportNormalizer; // 2.0 / viewport
4+
mat2x3 transform;
55
} push;
66

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

1616
void main() {
17-
gl_Position = vec4(vec2(in_PositionOffsetAndScanline.xy) * push.viewportNormalizer - vec2(1.0), 0.0, 1.0);
17+
gl_Position = vec4(vec3(in_PositionOffsetAndScanline.xy, 1)*push.transform, 0.0, 1.0);
1818
out_OriginOffsetAndScanline = in_PositionOffsetAndScanline;
1919
out_Color = in_Color;
2020
}

src/java.desktop/share/native/common/java2d/vulkan/VKPipelines.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ static VkResult VKPipelines_InitPipelineLayouts(VKDevice* device, VKPipelineCont
373373
VkPushConstantRange pushConstantRange = {
374374
.stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
375375
.offset = 0,
376-
.size = sizeof(float) * 2
376+
.size = sizeof(VKTransform)
377377
};
378378
VkPipelineLayoutCreateInfo createInfo = {
379379
.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,

src/java.desktop/share/native/common/java2d/vulkan/VKRenderer.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -738,15 +738,18 @@ static void VKRenderer_BeginRenderPass(VKSDOps* surface) {
738738
};
739739
device->vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
740740
// Calculate inverse viewport for vertex shader.
741-
viewport.width = 2.0f / viewport.width;
742-
viewport.height = 2.0f / viewport.height;
741+
VKTransform transform = {
742+
2.0f/viewport.width,0.0f, -1.0f,
743+
0.0f,2.0f/viewport.height, -1.0f
744+
};
745+
743746
device->vkCmdPushConstants(
744747
commandBuffer,
745748
renderer->pipelineContext->colorPipelineLayout, // TODO what if our pipeline layout differs?
746749
VK_SHADER_STAGE_VERTEX_BIT,
747750
0,
748-
sizeof(float) * 2,
749-
&viewport.width
751+
sizeof(VKTransform),
752+
&transform
750753
);
751754

752755
surface->renderPass->pendingCommands = VK_TRUE;

src/java.desktop/share/native/common/java2d/vulkan/VKTypes.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ typedef union {
4242
* [ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
4343
*/
4444
typedef struct {
45-
double m00, m01, m02;
46-
double m10, m11, m12;
45+
float m00, m01, m02;
46+
float m10 __attribute__((aligned(16))), m11, m12;
4747
} VKTransform;
4848

4949
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VKMemory);

0 commit comments

Comments
 (0)