Skip to content

Commit b860077

Browse files
avujbrbot
authored andcommitted
JBR-8418 Vulkan: RenderPerfTest Image test does not work properly
Passed transform to VKRenderer code
1 parent b82abfe commit b860077

4 files changed

Lines changed: 59 additions & 6 deletions

File tree

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -530,14 +530,24 @@ JNIEXPORT void JNICALL Java_sun_java2d_vulkan_VKRenderQueue_flushBuffer
530530
.m11 = m11, .m02 = m02, .m12 = m12
531531
};
532532

533-
VKRenderer_GetContext()->transform = transform;
534-
533+
if (VKRenderer_GetContext()->surface != NULL &&
534+
VK_IS_NEQ_TRANSFORM(&VKRenderer_GetContext()->transform, &transform))
535+
{
536+
VKRenderer_FlushSurface(VKRenderer_GetContext()->surface);
537+
VKRenderer_GetContext()->transform = transform;
538+
}
535539
}
536540
break;
537541
case sun_java2d_pipe_BufferedOpCodes_RESET_TRANSFORM:
538542
{
539543
J2dRlsTraceLn(J2D_TRACE_VERBOSE,
540-
"VKRenderQueue_flushBuffer: RESET_TRANSFORM")
544+
"VKRenderQueue_flushBuffer: RESET_TRANSFORM");
545+
if (VKRenderer_GetContext()->surface != NULL &&
546+
VK_IS_NEQ_TRANSFORM(&VKRenderer_GetContext()->transform, &VK_ID_TRANSFORM))
547+
{
548+
VKRenderer_FlushSurface(VKRenderer_GetContext()->surface);
549+
VKRenderer_GetContext()->transform = VK_ID_TRANSFORM;
550+
}
541551
}
542552
break;
543553

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -758,12 +758,16 @@ static void VKRenderer_BeginRenderPass(VKSDOps* surface) {
758758
.maxDepth = 1.0f
759759
};
760760
device->vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
761-
// Calculate inverse viewport for vertex shader.
761+
762+
// Calculate user to device transform
762763
VKTransform transform = {
763-
2.0f/viewport.width,0.0f, -1.0f,
764-
0.0f,2.0f/viewport.height, -1.0f
764+
2.0f/viewport.width, 0.0f, -1.0f,
765+
0.0f, 2.0f/viewport.height, -1.0f
765766
};
766767

768+
// Combine it with user transform
769+
VKUtil_ConcatenateTransform(&transform, &context.transform);
770+
767771
device->vkCmdPushConstants(
768772
commandBuffer,
769773
renderer->pipelineContext->colorPipelineLayout, // TODO what if our pipeline layout differs?

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,24 @@ void VKUtil_LogResultError(const char* string, VkResult result) {
311311
}
312312
J2dRlsTraceLn1(J2D_TRACE_ERROR, string, r)
313313
}
314+
315+
/**
316+
* Concatenate src transform to dst
317+
* [d00 d01 d02] [s00 s01 s02] [d00s00+d01s10 d00s01+d01s11 d00s02+d01s12+d02]
318+
* [d10 d11 d12] [s10 s11 s12] = [d10s11+d11s10 d10s01+d11s11 d10s02+d11s12+d12]
319+
* [ 0 0 1 ] [ 0 0 1 ] [ 0 0 1 ]
320+
*/
321+
void VKUtil_ConcatenateTransform(VKTransform* dst, const VKTransform* src) {
322+
float s00 = src->m00, s01 = src->m01, s02 = src->m02;
323+
float s10 = src->m10, s11 = src->m11, s12 = src->m12;
324+
float d00 = dst->m00, d01 = dst->m01, d02 = dst->m02;
325+
float d10 = dst->m10, d11 = dst->m11, d12 = dst->m12;
326+
327+
dst->m00 = d00 * s00 + d01 * s10;
328+
dst->m01 = d00 * s01 + d01 * s11;
329+
dst->m02 = d00 * s02 + d01 * s12 + d02;
330+
331+
dst->m10 = d10 * s00 + d11 * s10;
332+
dst->m11 = d10 * s01 + d11 * s11;
333+
dst->m12 = d10 * s02 + d11 * s12 + d12;
334+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,19 @@ inline VkBool32 VKUtil_CheckError(VkResult result, const char* errorMessage) {
6969
#define C_ARRAY_UTIL_ALLOCATION_FAILED() VK_FATAL_ERROR("CArrayUtil allocation failed")
7070
#include "CArrayUtil.h"
7171

72+
#define VK_ID_TRANSFORM ((VKTransform)\
73+
{1.0f, 0.0f, 0.0f, \
74+
0.0f, 1.0f, 0.0f})
75+
// 0.0f, 0.0f, 1.0f -- omitted values
76+
77+
#define VK_IS_NEQ_TRANSFORM(PA, PB) \
78+
((PA)->m00 != (PB)->m00 || \
79+
(PA)->m01 != (PB)->m01 || \
80+
(PA)->m02 != (PB)->m02 || \
81+
(PA)->m10 != (PB)->m10 || \
82+
(PA)->m11 != (PB)->m11 || \
83+
(PA)->m12 != (PB)->m12 )
84+
7285
typedef enum {
7386
FORMAT_ALIAS_ORIGINAL = 0,
7487
FORMAT_ALIAS_UNORM = 1,
@@ -113,6 +126,11 @@ uint32_t VKUtil_Log2(uint64_t i);
113126
*/
114127
FormatGroup VKUtil_GetFormatGroup(VkFormat format);
115128

129+
/**
130+
* Apply src transform to dst
131+
*/
132+
void VKUtil_ConcatenateTransform(VKTransform* dst, const VKTransform* src);
133+
116134
/*
117135
* The following macros allow the caller to return (or continue) if the
118136
* provided value is NULL. (The strange else clause is included below to

0 commit comments

Comments
 (0)